zoukankan      html  css  js  c++  java
  • Java流式IO

    1. 流式IO结构

      下图只给出了较为常用的IO流的类图结构

      Java的IO流主要分为两大类:字节流和字符流,字节流以InputStream和OutputStream为基础类,字符流以Reader和Writer为基础类。

    2. 字节流

      字节流以InputStream和OutputStream为基础类,常用的子类流有:

      FileInputStream和FileOutputStream用于从文件读写二进制数据;

      FilterInputStream和FilterOutputStream即过滤流,过滤流可以嵌套基本二进制输入输出流或者其他过滤流,增强处理输入输出流的处理能力。其中BufferedInputStream和BufferedOutputStream流提供了读写缓冲的功能,DataInputStream和DataOutputStream提供了对字节流读写的更多支持(如:读写二进制整数等);

         ObjectInputStream和ObjectOutputStream用于读写对象,对象所属的类需要实现Serializable接口,现在更常用的方式应该是使用JSON格式来传递对象;

      读写二进制文件通常使用如下嵌套流的方式:

      new DataInputStream(new BufferedInputStream(new FileInputStream(new File(filename))));

      new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(filename))));

    3.字符流

      字符流以Reader和Writer为基础类,常用的子类有:

      FileReader和FileWriter类用于从文件读写文本数据;

      BufferedReader和BufferWriter用于读写文本数据,提供了读写缓冲的功能,通常用于包装其他的字符输入输出流;

      BufferedReader类中常用的方法是readLine读入一行数据,然后使用String类的相关API处理,更常用的方式是使用java.util.Scanner类来对读字符流提供更多支持;

          PrintWriter类对写字符流提供了更多支持;

      读写文本文件通常使用如下嵌套流的方式:

      new BufferedReader(new FileReader(new File(...));

      new PrintWriter(new BufferedWriter(new FileWriter(new File(...))));

    4. 字节流和字符流的转换

       字节流转换成字符流使用InputStreamReader:

      new BufferedReader(new InputStreamReader(inputStream));

       字符流转换成字节流使用OutputStreamWriter:

      new BufferedWriter(new OutputStreamWriter(outputStream));

    5. ZIP文件输入输出流

      Java中提供了对zip压缩文件读写支持,相关类在java.util.zip包中。

      ZipInputStream类和ZipOutputStream分别继承成自java.io.FilterInputStream类和java.io.FilterOutputStream类,用于读写zip压缩文件。

      ZipEntry类用于表示zip文件中的一个条目,读写zip文件,首先创建ZipInputStream或者ZipOutputStream,然后使用getNextEntry方法获取zip文件中的每个被压缩的文件,依次处理,每个处理完成一个条目之后,调用closeEntry方法关闭当前条目,处理完整个zip文件后,调用close方法关闭整个zip文件。

      下面给出一个依次打印zip文件中所有文件内容的例子:

    ZipInputStream zin = new ZipInputStream(new FileInputStream("test.zip"));
    ZipEntry zipEntry;
    Scanner scanner;
    
    while( (zipEntry = zin.getNextEntry() ) != null )
    {
        scanner = new Scanner(zin);
        System.out.println(zipEntry.getName());   //输出文件名称
        //输出文件内容
        while(scanner.hasNextLine())
        {
            System.out.println(scanner.nextLine());
        }
        zin.closeEntry();
    }
    
    zin.close();

    参考资料 《Java核心技术》

  • 相关阅读:
    jquery判断浏览器类型
    webservice soapheader验证方法
    webservice跨域文件,好多年前的东西,远程调用,js服务器端使用,可以远程调用
    c# 动态调用webservice 转录一下
    linq使用 count与sum等
    js date扩展方法
    c#深拷贝的一个方法
    javascript jquery document.ready window.onload
    带你上手一款下载超 10 万次的 IDEA 插件
    Knative Serving 健康检查机制分析
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4734625.html
Copyright © 2011-2022 走看看