zoukankan      html  css  js  c++  java
  • Java的IO流各个类的使用原则

    参考:http://blog.csdn.net/ilibaba/article/details/3955799

    Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用):

    这里有详细介绍:Java的IO输入输出流类的介绍(有图)

    一、按数据来源(去向,也就是颗粒)分类:

      1 、文件:

                 FileInputStream, FileOutputStream, (字节流)

                 FileReader, FileWriter(字符流)

      2 、字节数组 byte[]:

                ByteArrayInputStream, ByteArrayOutputStream( 字节流 )

      3 、字符数组 Char[]:

               CharArrayReader, CharArrayWriter( 字符流 )

      4、字符串String:

             StringBufferInputStream,StringBufferOuputStream(字节流)
             StringReader, StringWriter( 字符流 )

      5 、网络数据流:

            InputStream, OutputStream,( 字节流 )
            Reader, Writer( 字符流 )

    二、按是否格式化输出分:

          1 、要格式化输出

                   PrintStream(只能字节流), PrintWriter(字节流和字符流)

    三、按是否要缓冲分:(一般推荐使用,可以提高效率)

            1 、要缓冲:

                     BufferedInputStream, BufferedOutputStream,( 字节流 )
                     BufferedReader, BufferedWriter( 字符流 )

    四、按数据格式分:(最根本的,除了文本文件使用字符流,其他一律字节流优先)

         1 、二进制格式(只要不能确定是纯文本的) :

                   InputStream, OutputStream 及其所有带 Stream 结束的子类

        2 、纯文本格式(含纯英文与汉字或其他编码方式):

                  Reader, Writer 及其所有带 Reader, Writer 的子类

    五、特殊需要:

         1 、从 Stream 到 Reader,Writer 的转换类:

                  InputStreamReader, OutputStreamWriter

         2 、对象输入输出:

                  ObjectInputStream, ObjectOutputStream

         3 、进程间通信:

                  PipeInputStream, PipeOutputStream,(字节流)

                  PipeReader, PipeWriter(字符流)

        4 、合并输入:

                  SequenceInputStream

        5 、更特殊的需要:

               PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader

    ******************使用原则的步骤*************************************
    决定使用哪个类以及它的构造方法的一般准则如下(不考虑特殊需要):

       第一,考虑最原始的数据格式是什么:

              原则四(是二进制文件还是纯文本,直接决定使用字节流还是字符流)

       第二,是否需要转换流:

             原则六第 1 点(字节转字符,字符转字节)

       第三,数据来源(去向)是什么:

            原则一(颗粒:基本单位,是文件,字节数组/字符数组,String,Object)

       第四,是否要缓冲:

          原则三 (特别注明:一定要注意的是 readLine() 是否有定义,有什么比 read, write 更特殊的输入或输出方法,通常多建议使用,可以提高效率

                            普通的InputStream/OutputStream或者Reader/Writer都没有定义readLine()方法也就是不能直接在控制台输出字符串

                            而Buffered缓冲流中有定义readLine(),不过不能自动换行,需要newLine()手动生成;而PrintStream和PrintWriter有println()方法

       第五,是否要格式化输出:(其实就是是否直接输出)

            原则二(PrintStream,PrintWriter)

    **********************几个例子**********************************

        Java复制文件的简单代码:

    1.使用字节流(所有都可以出来)

     1 package iotest;
     2 
     3 import java.io.*;
     4 import java.util.*;
     5 /**
     6  * Java复制文件的简单例子
     7  * */
     8 public class CopyWithoutBuffer {
     9     public static void main(String[] args){
    10         long start = System.currentTimeMillis();
    11         System.out.println("begin copy....");
    12         try {
    13             FileInputStream fis = new FileInputStream("E:\12.mp4");
    14             FileOutputStream fos = new FileOutputStream("E:\123.mp4");
    15             //这里使用了缓冲流,使用可以提高效率
    16             BufferedInputStream bis = new BufferedInputStream(fis);
    17             BufferedOutputStream bos = new BufferedOutputStream(fos);
    18             try {
    19                 byte[] buf = new byte[1024];
    20                 ////使用buffer
    21                 int read = bis.read(buf);
    22                 while(read!=-1){
    23                     bos.write(buf,0,read);//因为buf读到最后可能不满,所以要以read为准
    24                     read = bis.read(buf);
    25                 }
    26 
    27 //                //不使用buff,并不使用byte数组,效率低很多,耗时大
    28 //                int read = bis.read();//一次读取一个字节
    29 //                while(read!=-1){
    30 //                    bos.write(read);
    31 //                    read = bis.read();
    32 //                }
    33                 bos.close();
    34                 fos.close();
    35                 bis.close();
    36                 fis.close();
    37             } catch (IOException e) {
    38                 e.printStackTrace();
    39             }
    40             
    41         } catch (FileNotFoundException e) {
    42             e.printStackTrace();
    43         }
    44         
    45         long end = System.currentTimeMillis();
    46         System.out.println("Copy Complete,use times:"+(end-start)+" ms");
    47     }
    48 
    49 }
    View Code

    2.使用字符流(只能处理纯文本文件(处理起来比字节流快),视频音频会有问题):

     1 package iotest;
     2 
     3 import java.io.*;
     4 
     5 public class IOReaderTest {
     6     public static void main(String[] args) {
     7         System.out.println("开始");
     8         long start = System.currentTimeMillis();
     9         try {
    10             FileReader fr = new FileReader("e:\123.txt");
    11             FileWriter fw = new FileWriter("e:\123456.txt");
    12             /*
    13             BufferedReader br = new BufferedReader(fr);
    14             String abc = br.readLine();//BufferedReader才定义了readLine()方法
    15             //如果要换行,需要br.newLine()手动生成
    16             System.out.println(abc);
    17             */
    18             int read = fr.read();
    19             while(read!=-1){
    20                 fw.write(read);
    21                 read = fr.read();
    22             }
    23             fw.close();
    24             fr.close();
    25             long end = System.currentTimeMillis();
    26             System.out.println("耗时:"+(end-start)+" ms");
    27         } catch (FileNotFoundException e) {
    28             e.printStackTrace();
    29         } catch (IOException e) {
    30             e.printStackTrace();
    31         }
    32 
    33     }
    34 
    35 }
    View Code
  • 相关阅读:
    制作透明色:《CSS3 RGBA》与Opacity样式用法
    制作动画效果:《CSS3 Animation》
    CISCO运维记录之3650堆叠设备升级IOS(Version 16.3.6版本存在bug)
    08 Zabbix4.0系统配置事件通知
    24 Zabbix系统配置日志监控告警--关键字触发
    15 Zabbix Item类型之Zabbix trapper类型
    06 Zabbix4.0系统CISCO交换机告警模板规划信息(基础)
    05 Zabbix4.0触发器表达式Trigger expression支持的函数
    04 Zabbix4.0系统配置触发器trigger
    03 Zabbix4.0添加cisco交换机基本监控步骤
  • 原文地址:https://www.cnblogs.com/tommy-huang/p/4322589.html
Copyright © 2011-2022 走看看