从二进制文件读取或创建它的问题

时间:2013-09-28 01:51:25

标签: java dataoutputstream randomaccessfile

当我创建文件时,我使用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

亲切的问候队长困惑

3 个答案:

答案 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可以对其进行解码。