我们怎么能写字节列于文件(读它从文件)中Java?
是的,我们都知道已经有很多这样的问题,但他们非常混乱和主观的,事实上,由于有这么多的方式完成这项任务。
因此,让我们降低范围的问题:
域:
- 安卓/Java
我们想要什么:
- 快(尽可能)
- 错误(在一刚性细致的方式)
什么我们不做的事情:
- 第三方图书馆
- 任何库,需要安卓API后来于23(棉花)
(因此,这一规则出 Apache Commons, 谷歌番石榴, Java。仁王,给我们留下了 良好的ol'Java。io)
我们需要:
- 字节列总是完全相同(内容和大小)后通过的写-那么-读过程
- 写信的方法仅仅要求两个参数:文件的文件,并字节[]中的数据
- 读取的方法返回字节[]并且只需要一个参数:文件的文件
在我的特别情况下,这些方法是私人(不是图书馆)并且是 不负责以下,(但如果您想要创造一个更普遍的解决方案,适用于一个更广泛的受众,去吧):
- 线的安全(文件将不会被访问超过一个进程一旦)
- 文件正在null
- 文件指向不存在的位置
- 缺乏权限文件中的位置
- 字阵列在太大
- 字节列正在null
- 处理任何与"索引,""长度"或"追加"的参数/能力
所以...我们在搜索的最终防弹的代码,人们在未来可以假定安全使用因为你的答案有很多的选民,也没有评论说,"这可能会崩溃,如果..."
这是我迄今为止:
写字节的文件:
private void writeBytesToFile(final File file, final byte[] data) {
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
}
读字节从文件:
private byte[] readBytesFromFile(final File file) {
RandomAccessFile raf;
byte[] bytesToReturn = new byte[(int) file.length()];
try {
raf = new RandomAccessFile(file, "r");
raf.readFully(bytesToReturn);
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
return bytesToReturn;
}
从我读,可能的例外是:
FileNotFoundException:我是正确的,这不应该发生,因为只要的文件路径正在提供的是衍生于使用机器的自己的内部工具和/或如果应用程序进行了测试,正确吗?
IOException:我真的不知道什么可以引起这...但我猜想有没有办法绕过它,如果它。
因此,考虑...可以这些方法可以改进或更换,如果是这样,什么?