2017-04-25 65 views
0

在阅读本书的Java字节流的,我偶然看到这个例子书中使用,以显示两者之间的差异。使用的示例是数字199.根据该书,如果将此编号写入字符流,则将其写入三个不同的字符:0x31 0xC7 0x39。但是,如果将其写入字节流,则将其写入单个值0xC7。我的疑问是,199不适合Java中的一个字节。那么,它不应该被写成两个字节而不是一个?在二进制流中是否写成1个字节或两个字节?在字节流混乱

+1

为了这些目的,一个字节是无符号的,所以它在'0-255' – khelwood

+0

字节在Java中签署的范围,不是吗?它如何被无签名? – birraa

+0

一个_byte_仅仅是8个数据位:你可以把它当作一个数字0和255之间,即使在Java'byte'类型会认为它是不同的。 – khelwood

回答

1

如果你打电话OutputStream.write(int),这是写入单个字节的方法,它会忽略除了低8所有位。这意味着199-57将以完全相同的方式写入。对于特定的方法,这是它的工作方式,因为它只能写一个字节。

如果你叫一些其他的方法,它将不同的方式工作。例如,DataOutputStream.writeInt将一个整数写成四个字节,因为这就是该方法的用途。

+0

我只是试过这段代码:'int n = 199; OutputStream f3 = new FileOutputStream(“file4.txt”); f3.write(N);'是的,它是写0xC7像你说的这是-57。那么,是否可以使用字节流(而不是DataOutputStream)写入199?我的意思是没有199被损坏。 – birraa

+1

如果这是你想要的,你可以写两个字节。如何将它们读回来将决定你是否将它们视为两个数字中的每一个字节或一个数字中的两个字节(“短”)。 – khelwood