我正在寻找简单的东西(最好是外部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”或字节等效)放入其中。

[1] http://wiki.python.org/moin/usingpickle

有帮助吗?

解决方案

您已经分配了一个字节缓冲区 尺寸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();

请注意,对于真实代码,您应该使用试用/最终阻止,以确保不管例外如何,该文件始终关闭。

但是,这距离序列化还有很长的路要走。爪哇 有自己的二元序列化 - 请参阅 ObjectOutputStreamObjectInputStream. 。就我个人而言,我通常避免使用这种序列化,因为面对班级的变化,它可能非常脆弱。还有其他各种序列化方法,例如使用节俭或协议缓冲区进行二进制序列化,或序列化与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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top