|
|
1
26
因此,您可以发出EOF信号: 请注意,read()返回一个int值。如果输入是一个字节流,为什么read()不返回一个字节值?使用int作为返回类型允许read()使用-1表示它已到达流的末尾 http://java.sun.com/docs/books/tutorial/essential/io/bytestreams.html |
|
|
2
10
事实上,我最近一直在处理字节,它们可能很烦人。它们会在最轻微的刺激下向上转换为整数,并且没有将数字转换为字节的指定——例如,8l将给您一个长值8,但对于字节,您必须说(字节)8 最重要的是,除非您使用数组,否则它们(基本上)总是以int的形式存储在内部(甚至可能在那时..不确定)。 我想他们只是假设使用字节的唯一原因是I/o,实际上需要8位,但在内部,他们希望您总是使用int。 顺便说一下,一个字节的性能可能会更差,因为它总是要被屏蔽。。。 至少我记得几年前读过这本书,现在可能已经改变了。 作为您特定问题的示例答案,如果函数(f)取一个字节,而您有两个字节(b1和b2),则:
不起作用,因为b1&b2将向上转换为整数,而整数无法自动向下转换(精度损失)。因此,您必须编写以下代码:
这会让人恼火。 不要费心问为什么b1&b2向上转化——我自己最近也在骂这个! |
|
|
3
7
根据javadoc的 OutputStream ,此函数将忽略24个高阶位。我认为该方法的存在是出于兼容性的原因:因此不需要首先转换为byte,只需传递一个整数即可。 当做 |
|
|
4
3
更多背景: http://www.java-samples.com/showtutorial.php?tutorialid=260 IOStream类的假设是,即使在传递int时,调用方也只关心最低8位的数据。只要调用方知道它真正在处理字节,这是可以的,但当底层数据是使用其他字符编码(如多字节Unicode)的文本时,这就成了一个问题。这就是为什么早在Java1.1中就引入了Reader类。如果您关心文本数据和性能,IOStream类会更快,但是Reader类更易于移植。 |
|
|
5
2
可能是因为默认情况下字节是有符号的,而文件将字节存储为无符号值。这就是为什么
|