组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值

Posted

技术标签:

【中文标题】组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值【英文标题】:getStartOffset returns wrong value of file in assets folder after upgrade of assembly conditions 【发布时间】:2017-06-09 16:50:08 【问题描述】:

我升级装配条件后getStartOffset()方法无法正常工作。

以下代码片段可以很好地使用 api 19android 插件 1.5.0 + Gradle 版本 2.2.1 构建应用程序>),但是当我尝试对 api 25 和其他构建条件(Android 插件 2.2.0 + Gradle 版本 2.14 .1),getStartOffset() 返回值更大的文件长度。返回的长度为真。 其实读取的“png”-文件不是图片,我按照aapt的要求给了它扩展PNG。

AssetFileDescriptor in = null;
FileInputStream fin = null;
FileChannel channel = null;
try 
      in = context.getAssets().openFd(file); // .png
      fin = in.createInputStream();
      channel = fin.getChannel();
      int length = (int) in.getLength(); // channel.size();
      int offSet = (int) in.getStartOffset();
      MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY,
        0, length + offSet);
      ...
      ...
     

有什么问题?谢谢

【问题讨论】:

【参考方案1】:

这是正常行为。我不得不查看APK file 的内容来散列编辑器。令我惊讶的是,我的 PNG 文件两次出现在 APK-file 中:它的第一个入口偏移量是 52 字节,在第二种情况下,startOffset 超过 2MB。 IE。 StartOffsetapk-package 中的偏移。

兴奋是徒劳的。一切正常:

MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, offSet,   length);
int spos = 0;
while(spos < length) 
 ......

【讨论】:

以上是关于组装条件升级后,getStartOffset 返回 assets 文件夹中文件的错误值的主要内容,如果未能解决你的问题,请参考以下文章

Dapper 封装03-组装SQL-多条件

Java mysql 多表联查 与循环查询组装数据

Lambda表达式动态组装查询条件

番外新手如何选购配件比价到完成电脑组装升级

Spring-Data-JPA 中的查询如何动态组装条件?

java代码中组装where条件然后拼接到mybatis xml中的sql后面