关于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 个高位将被忽略。”
------解决方案--------------------
255无法用byte表示,虽然byte是八位,但是最高位是符号位,所以实际上byte的值由前面7位组成,7位能组成的值的范围为-128~127 ,所以无法表示255
------解决方案--------------------
哦,明白了,谢谢了!
你明白什么了呢。我根本看不明白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
------解决方案--------------------