Android - 从Assets读取文本文件似乎在实际数据之前/之后包含很多垃圾?

2 compression android assets corruption text-files

我用我的Android应用程序(在资产中)打包一个文本文件,我在应用程序本身中阅读.

为了避免这个文件被压缩,它被命名为'mytestfile.mp3',直到最近,它才能正常工作.

在最近的一个SDK/ADT变化中,从资产中读取时似乎发生了一些"奇怪"的事情,我对这是什么感到开心...

我使用这样的代码

AssetFileDescriptor descriptor = getAssets().openFd("mytextfile.mp3");
BufferedReader f = new BufferedReader(new FileReader(descriptor.getFileDescriptor()));
String line = f.readLine();
while (line != null) {
    // do stuff
    Log.d("TAG",line);
}
Run Code Online (Sandbox Code Playgroud)

我现在从日志中看到的是相当奇怪的 - 如果文件包含这样的东西

Fred
Barney
Wilma
Run Code Online (Sandbox Code Playgroud)

我在日志中看到了大量的废话

????!?c?W???6?f????m?>????'?????6?#6???l0??mp?
Run Code Online (Sandbox Code Playgroud)

跟着 - 最终是我的文字内容

Fred
Barney
Wilma
Run Code Online (Sandbox Code Playgroud)

接着是另一公吨的胡言乱语 - 其中一些看起来像这样

??????????4?u?'????????????????????????????????????????res/drawable-mdpi/icon.pngPK????????|v?,????????????'?????????????????????????????res/layout-land/dialog_color_picker.xmlPK????????|v?1?!?????t2???????????????????????????????classes.dexPK????????|v??V?????5?????????????????????????????????META-INF/MANIFEST.MFPK????????|v??v??????j?????????????????????????????????META-INF/CERT.SFPK????????|v?W7@?]?????????????????????????????????????META-INF/CERT.RSAPK????????????????????????
Run Code Online (Sandbox Code Playgroud)

如您所见,这似乎是来自APK的原始二进制内容(与文本文件无关)?

这是最近的包装问题还是我错过了什么?我正在使用ADT15,但我还没有尝试过最近的升级!?

ps我已经升级到最新的SDK/ADT并且这个问题仍然存在 - 显然我想跟谁有问题升级它(不知道问题是Eclipse/ADT/ANT还是Android中心)所以我会为想法开始赏金......

Mar*_*lts 9

这是因为AssetFileDescriptor.getFileDescriptor()您的.apk而不是.apk中的mytextfile.mp3文件.与AssetFileDescriptor你合作需要考虑AssetFileDescriptor.getStartOffset()到例如,实际文件的偏移,即mytextfile.mp3在你的情况下.

但是你的问题很简单.使用AssetManager.open(String)替代,这将给你一个InputStreammytextfile.mp3文件中.像这样:

InputStream inputStream = getAssets().open("mytextfile.mp3");
BufferedReader f = new BufferedReader(new InputStreamReader(inputStream));
// ...
Run Code Online (Sandbox Code Playgroud)