字节流判断读到流末尾的标记是什么以及他的返回值为什么是0-255

我查询了InputStream的api,关于read()方法的说明是:返回0到255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值-1。我的问题:... 我查询了InputStream的api,关于read()方法的说明是:返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。我的问题:一个字节可以表示的范围是-128 --- +127为什么api上说读到的范围是0-255,还有就是read是根据什么判断到了流的末尾的,他的结束标记是什么。
现在我已经知道为什么是反255了,原因是返回int符号位转变的原因,现在就问怎么判断刘末尾的,以及
System.out.println("a"+"\r"+"b");
System.out.println("a"+"\n"+"b");
System.out.println("a"+"\r\n"+"b");//效果为什么一样?
展开
 我来答
百度网友4c4256d
推荐于2017-11-25 · TA获得超过774个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:308万
展开全部
判断末尾的问题,首先InputStream这个类是一个抽象类,其中read()方法也是抽象方法,其具体实现,根据其子类不同而不同。以其两个子类为例,ByteArrayInputStream是通过判断当前的位置是否已经达到数组长度来判断是否结尾,FileInputStream则是通过判断是否读到文件尾来判断结尾。

补充说明一下关于255的问题。read()方法的返回值虽然是int,但这么理解是不好的,read()方法的返回值是InputStream的下一个字节,只是放在int的最后一个字节里。通常这个字节的int值,只要不是-1,没人会关心的。255的原因不是什么符号位的问题,只是一个int如果只有最后一个字节有效而其他都是0的话,范围就是0-255。

"\r"和"\n"的区别实际上是不同操作系统使用不同换行符的问题。
windows使用 \n\r 或 \r\n 来作为换行符。\r是回到当前行的头部,\n是移动到下一行
Mac OS使用 \r 来作为换行符
类Unix使用 \n 来作为换行符

至于你看到输出效果一样,是IDE的问题,IDE要跨平台,会把\r,\n\,\r\n都解释为换行。

一下说明均以windows平台为例
以如下程序段为例:

System.out.println("gggggg"+"\r"+"eeeee");
System.out.println("dddd"+"\n"+"ccc");
System.out.println("aa"+"\r\n"+"b");

直接在IDE(我用eclipse)中执行,显示为:
gggggg
eeeee
dddd
ccc
aa
b

在命令行中执行java test,显示为:
eeeeeg
dddd
ccc
aa
b

如果再命令行中执行java test > test.txt,也就是把输出重定向到test.txt文件里,然后用记事本打开,你会看到:
ggggggeeeee
ddddccc
aab

记事本不会把\n和\r单独解释,所以ddddccc显示在一行了。但是这些字符确实藏在哪一行里。
不信你可以全选,Ctrl+C,然后拷贝到百度知道这里某个文本框里,你会看到和IDE一样的输出。这事因为IDE和网页要跨平台,会把\r,\n\,\r\n都解释为换行。
更多追问追答
追问
ByteArrayInputStream听着名字就是个包装类,其实这些包装类底层都是用的字节流,只不过里面搞个个数组做为缓冲以加强io的性能,那么底层流往数组里按照角标来填充数据,问题的关键在于从源里读的过程是怎么判断读完的,你的回答是在说包装类是怎么添满缓充的,和我的问题没对上,关于换行符的确实如你所说没错。
追答
不,InputStream并不仅仅是为IO设计的,InputStream仅仅是字节流而已。ByteArrayInputStream这个类是InputStream的子类,其目的是将byte[]当做字节流来处理,和IO没有关系,这个类里面,实际上就是一个数组,只不过以字节流的形式访问。

我不太清楚你所指的包装类是什么,你可能用错了名词。我所知道的包装类指的是将int,long等包装成Integer,Long这样的包装类。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式