【转】Java输入输出流(四)

上一篇 / 下一篇  2017-05-24 16:49:25 / 个人分类:Java


3 .InputStream与Reader差别 OutputStream与Writer差别

InputStream和OutputStream类处理的是字节流,数据流中的最小单位是字节(8个bit)
Reader与Writer处理的是字符流,在处理字符流时涉及了字符编码的转换问题

  1. import java.io.*;  
  2. public class EncodeTest {  
  3.     private static void readBuff(byte [] buff) throws IOException {  
  4.        ByteArrayInputStream in =new ByteArrayInputStream(buff);  
  5.         int data;  
  6.         while((data=in.read())!=-1)   System.out.print(data+"  ");  
  7.         System.out.println();     in.close();     }  
  8.   
  9.    public static void main(String args[]) throws IOException {  
  10.        System.out.println("内存中采用unicode字符编码:" );  
  11.        char   c='好';  
  12.        int lowBit=c&0xFF;     int highBit=(c&0xFF00)>>8;  
  13.        System.out.println(""+lowBit+"   "+highBit);  
  14.        String s="好";  
  15.        System.out.println("本地操作系统默认字符编码:");  
  16.        readBuff(s.getBytes());  
  17.        System.out.println("采用GBK字符编码:");  
  18.        readBuff(s.getBytes("GBK"));  
  19.        System.out.println("采用UTF-8字符编码:");        
  20.        readBuff(s.getBytes("UTF-8"));      }  
  21. }  

Reader类能够将输入流中采用其他编码类型的字符转换为Unicode字符,然后在内存中为其分配内存

Writer类能够将内存中的Unicode字符转换为其他编码类型的字符,再写到输出流中。


9. FileWriter类(字符输出流类)

构造方法:FileWriter fw = new FileWriter(String fileName);//创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。

               如: FileWriter fw = new FileWriter("C:\\1.txt");

                 FileWriter fw = new FileWriter(String fileName,boolean append);//创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写。

               如:FileWriter fw = new FileWriter("C:\\1.txt",ture); //表示在fw对文件再次写入时,会在该文件的结尾续写,并不会覆盖掉。

主要方法: 

        void write(String str)   //写入字符串。当执行完此方法后,字符数据还并没有写入到目的文件中去。此时字符数据会保存在缓冲区中。此时在使用刷新方法就可以使数据保存到目的文件中去。

        viod flush()                //刷新该流中的缓冲。将缓冲区中的字符数据保存到目的文件中去。

        viod close()               //关闭此流。在关闭前会先刷新此流的缓冲区。在关闭后,再写入或者刷新的话,会抛IOException异常。



10. 如何选择IO流

    1)确定是数据源和数据目的(输入还是输出)

              源:输入流 InputStream Reader
              目的:输出流 OutputStream Writer

    2)明确操作的数据对象是否是纯文本

             是:字符流Reader,Writer
             否:字节流InputStream,OutputStream

    3)明确具体的设备。

             是硬盘文件:File++:

             读取:FileInputStream,, FileReader, 

              写入:FileOutputStream,FileWriter
             是内存用数组

                  byte[]:ByteArrayInputStream, ByteArrayOutputStream
                  是char[]:CharArrayReader, CharArrayWriter
             是String:StringBufferInputStream(已过时,因为其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
             是网络用Socket流

             是键盘:用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印

    3)是否需要转换流

            是,就使用转换流,从Stream转化为Reader,Writer:InputStreamReader,OutputStreamWriter 

    4)是否需要缓冲提高效率

       是就加上Buffered:BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter
    5)是否需要格式化输出


例:将一个文本文件中数据存储到另一个文件中。
     1)数据源和数据目的:读取流,InputStream Reader  输出:OutputStream Writer
     2)是否纯文本:是!这时就可以选择Reader Writer。
     3)设备:是硬盘文件。Reader体系中可以操作文件的对象是 FileReader FileWriter。

            FileReader fr = new FileReader("a.txt");  

             FileWriter fw = new FileWriter("b.txt");  
     4)是否需要提高效率:是,加Buffer
             BufferedReader bfr = new BufferedReader(new FileReader("a.txt");  );  
             BufferedWriter bfw = new BufferedWriter(new FileWriter("b.txt");  );  



11. IOException异常类的子类

1.public class  EOFException :
   非正常到达文件尾或输入流尾时,抛出这种类型的异常。
2.public class FileNotFoundException:
   当文件找不到时,抛出的异常。
3.public class InterruptedIOException:
   当I/O操作被中断时,抛出这种类型的异常。



TAG: java

奋斗的个人空间 引用 删除 819longjiayan   /   2017-05-24 16:55:34
51testing的空间太烦了,人家一篇的字数,我要转四篇才能解决,还不方便看,真是郁闷
 

评分:0

我来说两句

Open Toolbar