java吧 关注:1,212,688贴子:12,655,296
  • 16回复贴,共1

stream的read() 字节流成了字符?

只看楼主收藏回复

File a = new File("D:/1.txt");
FileInputStream b = new FileInputStream(a);
int c ;
while((c = b.read())!=-1){
System.out.println((char)c);
}
这里,Stream是字节流,输出为一个字节的char我也就认了,为什么是int?
百度了一下,大家说返回的int是字节数量,但是这个“字节数量”输出是我文本里的内容,不懂,大神呢


IP属地:江苏1楼2016-04-08 16:46回复
    不是字节数量,这里的read()一个字节一个字节读,返回的就是读到的值


    IP属地:广东2楼2016-04-08 17:03
    回复
      源码的解释是:the next byte of data,也就是说是数据的下一个字节,如果是末尾则返回-1


      IP属地:广东3楼2016-04-08 17:04
      收起回复
        InputStream是字节流,每次调用无参的read就是读取一个字节。只是返回值类型为int
        所以事实上你返回值的范围为0x00-0xff或者-1。因为很多编码在7位的acsii采取一个字节编码,所以你直接转为char,对于unicode在0x00-0x7f可以得到正确的字符,比如英文符号和字母数字等等。


        IP属地:广东4楼2016-04-09 20:54
        收起回复
          我理解的是文本在硬盘上保存也也是010101的一大堆数据,字节流一次读1个字节,也就是8位,最大值也就.127,一个int类型的变量存放它绰绰有余,然后把它转化成char类型,如果直接读中文,只能读半个,肯定乱码


          来自Android客户端6楼2016-04-09 21:49
          收起回复
            可以 用个数组保存 然后调spring 的方法


            IP属地:北京来自Android客户端8楼2016-04-11 07:27
            收起回复
              字节流是以几个字节几个字节为单位读取文件的,read方法返回的是这次循环读了几个字节,例如每次读取3字节,文件一共16字节,前5次循环返回值为3,第6次循环返回1读取最后一个字节,最后文件读到结尾返回-1,结束循环


              IP属地:浙江来自Android客户端9楼2016-04-11 18:31
              回复
                字节流是面向底层数据的,字符流是面向解析字符数据的。


                IP属地:广东10楼2016-04-11 20:03
                回复
                  定义一个变量,当c等于-1说明都到文件末尾了


                  IP属地:浙江来自iPhone客户端11楼2016-04-11 20:15
                  回复