我正在研究一个项目(使用Android Studio 3.1.4),该项目读取存储为.zip文件的神经网络,供Android中的DL4J进一步使用。
我正在尝试打开位于我的项目res \ raw目录中的.zip文件。为此,我尝试使用java.util.zip中的ZipFile()方法。
Screenshot of location of neuralnet.zip
问题:
以下代码引发异常:
File model_file = new File(String.valueOf(this.getResources().openRawResource(R.raw.neuralnet)));
ZipFile zipFile = new ZipFile(model_file);
例外:
“ java.util.zip.ZipException:文件太短而无法成为zip文件:0”
因此,我无法加载模型。在运行Android API 24的模拟设备上进行测试
在API 26上,例外有所不同:
java.io.FileNotFoundException:文件不存在:android.content.res.AssetManager$AssetInputStream@ddde727
有人在使用ZipFile()或在Android中使用DL4J加载神经网络模型方面有经验吗?
build.gradle是否需要一些特殊的东西?
感谢任何输入!
我尝试过的事情:
Android权限: 我正在运行android api> 23,并且在运行时请求READ_EXTERNAL_STORAGE权限。
清单包括:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
谢谢
Mo
答案 0 :(得分:2)
您的问题是文件打开的方式。
要打开原始文件,请查看以下链接:
https://developer.android.com/guide/topics/resources/providing-resources
答案 1 :(得分:1)
我可以通过解决ZipFile()方法来打开存档的内容,该方法给了我另一个错误,因为它期望使用路径而不是资源标识符。
仍然,打开存档文件,我使用了“ No Body”建议的方法:
InputStream ins1 = getResources().openRawResource(getResources().getIdentifier("configuration", "raw", getPackageName()));
InputStream ins2 = getResources().openRawResource(getResources().getIdentifier("coefficients", "raw", getPackageName()));
InputStream ins3 = getResources().openRawResource(getResources().getIdentifier("updaterstate", "raw", getPackageName()));
model = restoreMultiLayerNetwork(ins1, ins2, ins3, false);