黑马程序员技术交流社区

标题: 关于操作转换流一个细节的问题 [打印本页]

作者: 我为你着迷    时间: 2014-12-22 13:49
标题: 关于操作转换流一个细节的问题
本帖最后由 我为你着迷 于 2014-12-22 13:51 编辑
  1. import java.io.*;
  2. class EncodeStream
  3. {
  4.                 public static void main(String[] args) throws IOException
  5.                 {
  6.                       //writeText();
  7.                       readText();
  8.                                 
  9.                 }
  10.                
  11.                public static void readText() throws IOException
  12.                 {
  13.                         InputStreamReader isr=new InputStreamReader(new FileInputStream("utf.txt"),"utf-8");
  14.                         
  15.                         char[] buf=new char[10];
  16.                         int len=isr.read(buf);
  17.                         
  18.                         String str=new String(buf,0,len);
  19.                         System.out.println(str);
  20.                         
  21.                         isr.close();
  22.                 }
  23.                
  24.                 public static void writeText() throws IOException
  25.                 {
  26.                         OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("utf.txt"),"utf-8");        
  27.                         
  28.                         osw.write("你好");
  29.                         
  30.                         osw.close();
  31.                 }
  32. }        
复制代码
大家好 我想问下这句话char[] buf=new char[10]; 为什么用的是字符数组呢 而不是字节数组呢?byte[] buf=new byte[10];
这不是在操作字节读取流对象呢?  哪位帮小弟解答下 好吗  黑马币无限给你!


作者: huoxy    时间: 2014-12-22 14:10
已经用InputStreamReader将字节流转换为字符流了,并且指定了编码表,所以可以定义char[]缓冲区,以字符形式读取。
作者: wtjohn    时间: 2014-12-22 14:10
读取的是文本文件啊
作者: duluhua    时间: 2014-12-22 14:20
1.不知道你注意到这行代码没,int len=isr.read(buf); 这句话的含义是把从文件中读取出来的内容放到一个字符数组中,参数是char[]   而不是byte[]。这是最为主要的原因。后面的方法需要char【】 所以就得给传char[]
2.我之前也没考虑过这个问题,也是现找的答案。还有一点就是,byte[]是字节数组,每个字节存储数据的大小是非常小的-128至127。而从文件中读取出来的数据,有数字、字符、特殊符号等,其大小可能超出byte的存储范围。
3.最重要的是,第二条是我自己这么理解的,第一条应该是最为准确的。
4.你是怎么理解的?
作者: 我为你着迷    时间: 2014-12-22 17:07
duluhua 发表于 2014-12-22 14:20
1.不知道你注意到这行代码没,int len=isr.read(buf); 这句话的含义是把从文件中读取出来的内容放到一个字 ...

我!!!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2