从文件写和读取字节[
-
11-10-2019 - |
题
我正在寻找简单的东西(最好是外部lib)来编写和加载文件的字节[]。或多或少像[Python's Pickle] [1]。
byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes); // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
问题似乎是我无法从这样的文件中读取对象结构。在十六进制的编辑中,“某个Bytes”仅包含几个或0。因此,似乎没有将任何内容(“ t”或字节等效)放入其中。
解决方案
您已经分配了一个字节缓冲区 尺寸 的 bytes
, ,但这并不意味着字节缓冲区与字节数组相关联。您可以使用一个字节阵列使用 ByteBuffer.wrap
.
这是对您的代码的最小更改 做 写 t
进入文件:
byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
请注意,对于真实代码,您应该使用试用/最终阻止,以确保不管例外如何,该文件始终关闭。
但是,这距离序列化还有很长的路要走。爪哇 做 有自己的二元序列化 - 请参阅 ObjectOutputStream
和 ObjectInputStream
. 。就我个人而言,我通常避免使用这种序列化,因为面对班级的变化,它可能非常脆弱。还有其他各种序列化方法,例如使用节俭或协议缓冲区进行二进制序列化,或序列化与XML,JSON或其他一些人类可读格式。
其他提示
你可以
seek(position)
b = read(length)
然后b将是您长度的字节数组。
抱歉 - 重读您正在寻找写作而不是阅读。
同一件事的更简单版本。
byte[] bytes = new byte[10];
bytes[1] = 't';
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
关于如何从网络上的文件中读取/写字节[]的示例很多。尝试Google。
不隶属于 StackOverflow