java – 保存大型短阵列android
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 保存大型短阵列android,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2153字,纯文字阅读大概需要4分钟。
内容图文
![java – 保存大型短阵列android](/upload/InfoBanner/zyjiaocheng/817/cbf6cccbb20a47b2a58c25854dc3fb45.jpg)
我基本上正在寻找一种方法来保存和重新加载几个大型阵列(大约500万短)在Android上以一种快速的方式.我的应用程序需要以一种我可以在以后回复它们的方式保存它们,所以我不能只将它们保存在内存中……
到目前为止,我已经尝试将它们转换为byte []数组,它们似乎成功保存,但我无法获取数据,这就是我的保存代码的工作方式(它实际上是分离函数,在这里简化):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOuputStream oos = new ObjectOutputStream(baos);
oos.writeObject(data);
oos.close();
baos.close();
FileOutputStream fos = new FileOutputStream(filename); // valid absolute path
fos.write(baos.toByteArray());
fos.close();
加载部分是我卡住的地方,我如何从字节[]得到一个短[]?
我还读到数据库可能也可以工作,但是它足够快吗?
我看了看Stackoverflow和谷歌,似乎找不到有类似问题的人,或者至少找到解决方案,但作为一个初学者,我可能会错过一些明显的东西……
解决方法:
如果数据是short []并且您想将整个事物写入文件,请不要在内存中使用缓冲区,直接写入.
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename));
try {
oos.writeObject(data);
} finally {
oos.close();
}
如果您通过ObjectOutputStream编写它,则必须通过ObjectInputStream读取它,因为它不仅仅是编写纯数据而且还有一些类型信息.如果你输入一个short [],你会得到一个short []返回(你可以尝试跳过这些字节,但是你必须分析这个流实际写的是什么).如果您的ObjectOutputStream写入ByteArrayOutputStream,这也适用.
如果您不想处理这个混乱,请执行ObjectOutputStream基本上做的事情:
DataOutputStream dos = new DataOutputStream(new FileOutputStream(filename));
try {
for (int i = 0; i < data.length; i++) {
dos.writeShort(data[i]);
}
} finally {
dos.close();
}
DataOutputStream写入普通数据,因此您可以根据需要直接以byte []的形式读取数据.如果字节顺序很重要:它使用的是Big-Endian.
由于这种方法写入单个字节而不是byte []的chuck,因此可以在中间使用BufferedOutputStream.默认使用8kB缓冲区,但它可以增加,这可以提供更好的结果.现在,写入数据将在内存中将短转换为字节,一旦有足够的数据可用,整个块将被推送到低级OS功能以进行写入.
int bufferSize = 32 * 1024;
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(filename),
bufferSize)
);
try {
for (int i = 0; i < data.length; i++) {
dos.writeShort(data[i]);
}
} finally {
dos.close();
}
内容总结
以上是互联网集市为您收集整理的java – 保存大型短阵列android全部内容,希望文章能够帮你解决java – 保存大型短阵列android所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。