直接从CipherInputStream解密并读取mp3文件而不存储

时间:2013-09-30 08:07:50

标签: java android encryption mp3

我在我的Android应用程序中下载并加密mp3文件。但我正在尝试解密和读取文件而不将文件写回文件系统。当我尝试使用CipherInputStream将mp3流式传输到android Mediaplayer API时,它无法识别该文件。但是,当我尝试转换为Byte数组并将其作为ByteArrayInputStream进行流式处理时,它可以正常工作,但我不想这样做,因为它可能需要很长时间才能生成较大的文件并将数据存储在JVM中。

这是我的代码

FileInputStream fis = new FileInputStream(file);
CipherInputStream cis = new CipherInputStream(fis, cipher);
mbuffer = new ByteArrayInputStream(getByte(cis));
Response streamResponse = new Response(Status.OK, mimeType, mbuffer);

上面的代码工作正常但是这个问题

new ByteArrayInputStream(getByte(cis));

getByte方法中,我将CipherInputStream转换为字节,然后将其转换回InputStream

我正在尝试将cis直接传输到

Response streamResponse = new Response(Status.OK, mimeType, cis);

但不适用于MediaPlayer

1 个答案:

答案 0 :(得分:0)

         File tempMp3 = File.createTempFile("kurchina", "mp3", getCacheDir());

         tempMp3.deleteOnExit();

         FileOutputStream fos = new FileOutputStream(tempMp3);

         fos.write(mp3SoundByteArray);

         fos.close();



         FileInputStream fis = new FileInputStream(tempMp3);

         mp.setDataSource(fis.getFD());



         mp.prepare();

         mp.start();