当我创建文件时,我使用dataoutputstream来编写一个' int'一次:
Database.write(0)
当然它并没有说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
亲切的问候队长困惑
答案 0 :(得分:2)
write()
方法将单个字节写入文件。它的参数是一个int,但假定int在[0,255]范围内。
如果要将完整的4字节int写入文件,请使用writeInt()
方法。否则,要再次仅检索值0,请使用read()
从文件中读取一个字节。
作为旁注,RandomAccessFile可以处理读写操作,因此您应该同时使用它。
答案 1 :(得分:1)
问题是DataOutputStream.write(int b)
实际上只会写出最不重要的字节。如果要写出4个字节,则需要使用DataOutputStream.writeInt(int)
答案 2 :(得分:0)
你用中文写一些东西,然后用英语读它,当然这没有意义。如果您想使用DataOutputStream撰写,则必须使用DataInputStream进行阅读。如您所见,原始读取将无法理解数据流使用的编码。或者,您可以读取原始字节,但是您也必须编写它们,而不是使用对数据进行编码的DataOutputStream,以便DataInputStream可以对其进行解码。