日期:2014-05-20  浏览次数:20772 次

关于OutputStream类一个方法的疑问?
write
public abstract void write(int b)
                    throws IOException将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 
OutputStream 的子类必须提供此方法的实现。 


参数:
b - 字节 
抛出: 
IOException - 如果发生 I/O 错误。尤其是,如果已关闭输出流,则可能抛出 IOException。


这里为什么不用byte,而要用int哪?不是浪费了吗?既然写的是一个字节,用byte不就够了,怎么要多3个字节哪?

------解决方案--------------------
如果用byte类型,由于java里都是有符号数据类型,所以某些值是表达不了的,比如想写入255,要是用java里的byte类型,最高位是符号位,所以表达范围是-128~127,表示不了255.
也正是这个原因,所以注释里有这么一句话:“向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。” 
------解决方案--------------------
引用:
Quote: 引用:

哦,明白了,谢谢了!
你明白什么了呢。我根本看不明白2L。


他的意思是使用byte无法写入255这样的值么?

255无法用byte表示,虽然byte是八位,但是最高位是符号位,所以实际上byte的值由前面7位组成,7位能组成的值的范围为-128~127 ,所以无法表示255

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

哦,明白了,谢谢了!
你明白什么了呢。我根本看不明白2L。


他的意思是使用byte无法写入255这样的值么?

255无法用byte表示,虽然byte是八位,但是最高位是符号位,所以实际上byte的值由前面7位组成,7位能组成的值的范围为-128~127 ,所以无法表示255


为什么需要255这个数据呢。
对于字节流来说,-128到127不可以么?

对于流来说,跟255,-128也没什么关系吧,他需要的只是010101010的串。如果硬要把-128当成255来处理,也不是一件很难处理的事情吧。
需要用四倍的空间,尽为了一个数字意义上的255?

------解决方案--------------------
或许,这个方法只是一个中间的过程,可能是用于一个字节一个字节地写入一个多字节数据。因为输入流InputStream有一个与之对应的方法read():
  “从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。。。”

------解决方案--------------------
Java的底层 byte short  char 都是由int 实现的。其实在底层根本只有int
------解决方案--------------------