`

Java IO流分析整理

阅读更多

 

Java中的流,可以从不同的角度进行分类。

按照数据流的方向不同可以分为:输入流输出流

按照处理数据单位不同可以分为:字节流字符流

按照实现功能不同可以分为:节点流处理流

 

######### 输出流 & 输入流 #############

输出流:

 

 

输入流:

 

因此输入和输出都是从程序的角度来说的。

 

 

############ 字节流 & 字符流 #######################

 

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

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

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

 

 

############ 节点流 & 处理流 #######################

节点流:直接与数据源相连,读入或读出。

 

直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。

处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。

 

 

 

 

Jdk提供的流继承了四大类:

  InputStream(字节输入流)

 

  OutputStream(字节输出流)

 

  Reader(字符输入流)

 

  Writer(字符输出流)。

 

以下是javaio中常用的流。

 

字节输入流:

字节输出流:

字符输入流:

字符输出流:

 

简单介绍其上图:

----------------------------------

对文件进行操作:FileInputStream(字节输入流),FileOutputStream(字节输出流),FileReader(字符输入流),FileWriter(字符输出流),同属节点流

 

对管道进行操作:PipedInputStream(字节输入流),PipedOutStream(字节输出流),PipedReader(字符输入流),PipedWriter(字符输出流),同属节点流

PipedInputStream的一个实例要和PipedOutputStream的一个实例共同使用,共同完成管道的读取写入操作。主要用于线程操作。

 

字节/字符数组:ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter是在内存中开辟了一个字节或字符数组,同属节点流

 

Buffered缓冲流:BufferedInputStreamBufferedOutputStreamBufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的作用的主要目的是:避免每次和硬盘打交道,提高数据访问的效率。

 

转化流:InputStreamReader/OutputStreamWriter,把字节转化成字符,属于处理流.

 

数据流:DataInputStreamDataOutputStream,以最小的空间进行相关java基础类型数据的存储(int long char byte double等),属于处理流.

因为平时若是我们输出一个8个字节的long类型或4个字节的float类型,那怎么办呢?可以一个字节一个字节输出,也可以把转换成字符串输出,但是这样转换费时间,若是直接输出该多好啊,因此这个数据流就解决了我们输出数据类型的困难。数据流可以直接输出float类型或long类型,提高了数据读写的效率。

 

打印流:printStreamprintWriter,一般是打印到控制台,可以进行控制打印的地方,属于处理流.我们一齐看看PrintWriter其中一个构造函数,大家就懂了.

 

    public PrintWriter(Writer out,
                       boolean autoFlush) {
        super(out);
        this.out = out;
        this.autoFlush = autoFlush;
        lineSeparator = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("line.separator"));
    }

    public PrintWriter(String fileName) throws FileNotFoundException {
        this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),
             false);
    }

    public PrintWriter(OutputStream out, boolean autoFlush) {
        this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);

        // save print stream for error propagation
        if (out instanceof java.io.PrintStream) {
            psOut = (PrintStream) out;
        }
    }

 

 

 

对象流:ObjectInputStreamObjectOutputStream,把封装的对象直接输出,而不是一个个在转换成字符串再输出。

 

序列化流:SequenceInputStream

对象序列化:把对象直接转换成二进制,写入介质中。

使用对象流需要实现Serializable接口,否则会报错。而若用transient关键字修饰成员变量,不写入该成员变量,若是引用类型的成员变量为null,值类型的成员变量为0.

分享到:
评论

相关推荐

    Java IO流分析、IO整理与IO优化.pdf

    ### Java IO流分析、IO整理与IO优化 #### 一、IO流概念解析 Java中的文件操作主要通过**流**的方式进行。所谓流,是指在Java内存中的一组有序数据序列,它允许开发者以一种线性的方式处理数据,无论是从源(如文件...

    Java-IO流基础例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    Java IO流是Java编程语言中一个非常重要的概念,它提供了数据传输的能力,使得程序能够读取和写入数据到各种输入/输出设备,如硬盘、内存、网络等。本资源包含的是Java-IO流的基础例题、源码及PPT教学文档,适合初学...

    JAVA核心面试知识整理.pdf

    JAVA IO/NIO:Java IO是基于流的IO模型,包括阻塞IO模型、非阻塞IO模型、多路复用IO模型、信号驱动IO模型和异步IO模型。Java NIO是基于缓冲区(Buffer)和通道(Channel)的IO模型,支持非阻塞和选择器(Selector)。 JVM...

    Java核心面试知识整理.pdf

    接下来是Java IO/NIO的内容,Java IO是指传统的输入输出流模型,基于阻塞IO模型,而NIO(New IO)则是引入了缓冲区、通道(Channel)和选择器(Selector)等概念,支持非阻塞IO模型,它允许单线程处理多个网络连接。...

    JAVA核心知识点整理.pdf

    4. Java IO/NIO:Java IO和NIO(New IO)是Java编程中用于处理输入/输出流的不同方式。文档中提到了阻塞和非阻塞IO模型、多路复用IO模型以及异步IO模型。在NIO中,还介绍了缓冲区(Buffer)、通道(Channel)和选择...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收 基础语法 理解Java中对象基础Object类 ...

    JAVA核心面试知识整理-最全.zip

    这部分通常包括Java语法、面向对象编程(OOP)概念、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)和IO流。面试官可能会询问关于类、对象、封装、继承和多态的问题,或者要求你解释如何在实际场景中...

    2020年最新Java核心知识点整理.pdf

    Java的IO和NIO是处理输入/输出流的基础。IO主要是阻塞式的,而NIO提供了非阻塞式和基于选择器的IO。 - **阻塞IO模型**:直到数据准备好时才执行,否则线程挂起。 - **非阻塞IO模型**:线程不断轮询以检查数据是否...

    2020最新JAVA核心知识点整理,完整.zip

    4. **IO流**:Java的输入输出系统涉及文件操作、网络通信等,理解流的概念和分类(字节流、字符流、输入流、输出流)以及缓冲区、转换流的使用。 5. **多线程**:Java提供了丰富的多线程支持,包括Thread类、...

    Java核心知识整理.pdf

    作为Java工程师,需要掌握Java的多方面知识点,包括但不限于JVM(Java虚拟机)原理、Java内存模型、垃圾回收机制、引用类型、集合框架、输入输出流(IO/NIO)以及类加载机制等。 JVM(Java虚拟机) JVM是Java程序...

    JAVA 各类包,包括Jama0, Math3,CommonIO,Poi

    常用的JAVA,Android包库,闲的整理一下打包上传,math3主要用于线性计算,回归分析等,jama主要用于矩阵计算,Poi用于输出大量数据到Excel,再导入matlab。commonIO也是用于输入输出流

    JAVA架构知识库整理.pdf

    Java NIO是一种基于通道(Channel)和缓冲区(Buffer)的I/O操作方法,与传统的Java IO基于流的方式不同,NIO能够提供非阻塞式的高伸缩性网络。 Java的集合框架是Java API中提供的一组接口和类。常见的集合接口有...

    Java面试题以及答案整理.pdf

    使用`java.io`包中的`FileReader`、`BufferedReader`等类进行文件读取,同时维护一个计数器记录行数。 19. **程序运行结果** 题目未给出具体程序,无法分析结果。 20. **抽象类和接口的区别** 抽象类是部分实现...

    JAVA核心面试知识整理

    - IO流:字节流、字符流、缓冲流、对象流、转换流、管道流。 - 集合框架:List、Set、Map接口及其实现类,泛型,集合的遍历和操作。 - Lambda表达式、Stream API和函数式编程。 - 注解(Annotation)的使用及...

    JAVA核心知识整理.pdf

    - **多路复用IO模型**:通过一个线程来监听多个IO流,当某个流准备好读取或写入时,才触发相应的处理逻辑。 - **信号驱动IO模型**:在进程发出IO请求后就可以继续做其他事情,当数据准备好时,操作系统会发送一个...

Global site tag (gtag.js) - Google Analytics