在创建文件时,我使用dataoutputstream一次编写一个“int”:
Database.write(0)当然,它没有说,它是一个变量,但是我打印了它,第一个变量是0,所以我把它作为一个例子。
现在我还不能100%确定,但是只使用我的文件现在应该包含的代码行:
0000 0000 0000 0000 0000 0000 0000 0000对吗?
因此,当我试图读取前4个字节时,使用:
RandomAccessFile raf = new RandomAccessFile("Database", "r");
raf.seek(0);
byte[] ByteArr = new byte[4];
raf.read(ByteArr, 0, ByteArr.length);ByteArr应该只包含0?
我打印了Byte[],这就是我得到的:
0
4
13
-126亲切问候困惑船长
发布于 2013-09-28 01:55:25
write()方法将单个字节写入文件。它的参数是int,但假设int在0,255范围内。
如果要将完整的4字节int写入文件,请使用writeInt()方法。否则,若要再次检索值0,请使用read()从文件中读取一个字节。
顺便提一句,RandomAccessFile可以同时处理读和写,所以您应该同时使用它。
发布于 2013-09-28 01:55:28
问题是DataOutputStream.write(int b)实际上只写最不重要的字节。如果您想写出4个字节,则需要使用DataOutputStream.writeInt(int)
发布于 2013-09-28 01:55:56
你用中文写东西,然后试着用英语读,当然这是没有意义的。如果要使用DataOutputStream进行写入,则必须使用DataInputStream进行阅读。正如您所看到的,原始读取不会理解数据流使用的编码。或者,您可以读取原始字节,但随后也必须编写它们,而不是使用DataOutputStream对数据进行编码,以便DataInputStream可以对其进行解码。
https://stackoverflow.com/questions/19062380
复制相似问题