欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java----IO流

程序员文章站 2024-03-05 14:48:13
...

IO流是Java中一个相当重要的概念和组成部分。
但,IO流并不难,在熟练之后,我们完全可以通过查询API或者IDE自带的提示功能简单的使用IO流。
想一篇文章梳理出IO,难度有点大,有些地方可能细节不够。

1.IO流简介

用官方一点的说法:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

通常而言,我们对IO流有以下的分类:
• 根据处理数据类型的不同可以分为:字符流和字节流
• 根据数据流向不同可以分为:输入流和输出流

简单的解释一下:
字符流和字节流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。即多了一个转换的操作

字节流和字符流的区别:
• 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
• 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
输入流和输出流
对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

2.IO流分类

Java----IO流

以下就对这些进行梳理:

2.1 - InputStream /OutputStream

这两个类有非常多的实现,也组成了IO流主要的结构。
借用别人的图展示一下。
Java----IO流

当然,可能随着Java的更新发布,会有很多新的特性,可能有些变动,但是大致变化应该不大。
这些属性在API中有详细的描述,对应的方法也可以找到。所以发,方法就不详细列举了

Java----IO流
Java----IO流
Java----IO流
Java----IO流

2.2 - reader、writer

以及字符流的常见类
Java----IO流

Java----IO流

Java----IO流

Java----IO流

2.3 - file

Java----IO流

这些仅仅是稍作总结,没有什么实际的东西。

3.IO流分析

IO流通常而言包括输入和输出两个部分,对应起来一般不存在太多的疑问,这里简单分析一下。
这里只说说几个方面:
我一般个人喜欢把IO流分为三种:

  • 1,读取,写入的IO流
  • 2,进行加工的IO流(类似于加密,压缩)
  • 3,进行交互的IO流(类似于管道流)

大概说说这三种:

读取写入:

package IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
*@author:gang
*@version:
**/
public class IOtest {
    byte[] trueFile =new byte[4096];
    int len = 0;
    public void iotest01() throws IOException{
        File file = new File("E:/aaa.txt");
        System.out.println("是否可修改该文件"+file.canWrite());
        System.out.println("是否可修改该文件"+file.canRead());
        System.out.println("测试此抽象路径名表示的文件或目录是否存在"+file.exists() );
        System.out.println("返回此抽象路径名的绝对路径名形式"+file.getAbsoluteFile());
        System.out.println("file方法还有很多功能,这里就不演示了,这种一般查API很快就可以用出来");



            FileInputStream fileInputStream = new FileInputStream(file);
            int len = 0;  
            byte[] buf = new byte[4096];  
            while((len=fileInputStream.read(buf))!=-1){  
                System.out.println(new String(buf,0,len));  
            }  
            fileInputStream.close();
    }
    public void Out() throws IOException{
        File file = new File("E:/aaa.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        byte[] b = new byte[4096];
        String newString = "success";
        b=newString.getBytes();
        fileOutputStream.write(b);
        fileOutputStream.close();
    }
}
package IO;

import java.io.IOException;

/**
*@author:gang
*@version:
**/
public class IOmain {
    public static void main(String [] args) throws IOException, InterruptedException{
        IOtest iOtest = new IOtest();
        iOtest.iotest01();

        Thread.sleep(1000);
        iOtest.Out();
        System.out.println("out success");
    }
}

Java----IO流

Java----IO流

这就是最简单的读写。

2,进行加工的IO流

    File file = new File("E:/aaa.txt");
        FileInputStream fileInputStream =new FileInputStream(file);
        DeflaterInputStream deflaterInputStream = new DeflaterInputStream(fileInputStream);

类似于这样,配合GZIPOutputStream可输出压缩文件
管道流就不多说了,这个案例很多

4.总结

IO流不算复杂,知道了怎么查API,IO流就掌握了一大半。

参考:
http://www.importnew.com/14410.html
API文档

上一篇: Java IO流详解

下一篇: 7.26