`

IO-概念、流细节

 
阅读更多

流:就是用于读写数据的,在Java程序中,对于数据的输入、输出操作都是以流(stream)的方式进行。


IO流分类:

按处理数据的单位分为:字节流、字符流

按数据流的方向分为:输入流、输出流

按功能分为:节点流、处理流


节点流:可以从一个特定的数据源(节点)读写数据,如文件、内存

处理流:连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。


FileReader:read()读取一个字符就返回,read(char[])可以将每次读取的数据缓存到char数组中,当char数组中数据写满时再返回

BufferedReader:内部封装了一个长度为8192的char数组用做缓冲区,将每次从底层流读取的数据写入缓冲区,在调用read()、read(char[])、readLine()方法时,实际上是从内部的缓冲区中获取数据。

注:使用BufferedReader读取数据时,它会先判断内部缓冲区是否有数据,如果没有,则先往缓冲区填充数据,再从中取出数据并返回。


 

FileWriter:内部封装了一个长度为1024的char数组用做缓冲区,当缓冲区写满数据时,才往硬盘上写数据。

BufferedWriter:内部封装了一个长度为8192的char数组用做缓冲区,当缓冲区写满数据时,才往底层流写数据。

注:当调用wite(char[])方法时,如果参数的长度大于了其内部缓冲区的长度,则会直接调用底层流。

 


FileInputStream:read()读取数据时调用本地方法(native)并直接将数据返回,read(byte[])可以将每次读取的数据缓冲到byte数组中,当byte数组中的数据写满时再返回,read(byte[])也是本地方法。有时读取到的一个字节可能是-1,但是文件并没有读取到结尾,为了避免错误的返回-1,在读取到一个字节时,将其提升为int类型(int intResult = byteResult&0xff),前面3个8位补0,而使用write()方法写数据时,又会将这个int类型的数字强转为byte类型,这样就得到了数据的原始状态。

BufferedInputStream:内部封装了一个长度为8192的byte数组用做缓冲区,将每次从底层流读取的数据写入缓冲区,在调用read()、read(byte[])方法时,实际上是从内部的缓冲区中获取数据。

注:使用BufferedInputStream读取数据时,它会先判断内部缓冲区是否有数据,如果没有,则先往缓冲区填充数据,再从中取出数据并返回。


FileOutputStream:内部没有封装缓冲区,直接调用本地方法将数据写到目的地,所以它的flush()方法是空实现。

BufferedOutputStream:内部封装了一个长度为8192的byte数组用做缓冲区,当缓冲区写满数据时,才往底层流写数据。

注:当调用wite(byte[])方法时,如果参数的长度大于了其内部缓冲区的长度,则会直接调用底层流。


装饰设计模式:当想要对已有对象进行功能增强时,可以定义了一个类,将想要增强的对象传入构造器,在已有功能的基础上,提供增强的功能。这个自定义的类就称为装饰类。


分享到:
评论

相关推荐

    前端开源库-atma-io-middleware-base

    在ATMA.IO框架中,中间件则是一种处理数据流的机制,每个中间件可以独立执行特定的操作,如数据转换、错误处理、缓存等,这些中间件可以按照一定的顺序串联起来,形成一个处理流水线。 "atma-io-middleware-base"库...

    stroem-io_github_io-源码.rar

    通过对strom-io源码的深入学习,开发者可以了解其内部实现细节,理解数据流处理的工作原理,从而更好地定制和优化自己的实时数据处理系统。同时,源码分析也能帮助开发者解决遇到的问题,提高对分布式系统的理解。

    Python库 | vineyard_io-0.1.15-py3-none-any.whl

    尽管具体的功能细节并未在标题和描述中明确给出,但我们可以推测,这个库可能涉及数据的读取、写入、转换以及与其他数据存储系统的交互。在数据分析和机器学习项目中,这样的库往往是不可或缺的,因为它能帮助开发者...

    Java基础篇:IO流.pdf

    本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换流、打印流、数据流和对象流的处理过程和使用方法。 首先,Java中的IO流根据数据流向可以分为输入流...

    IO流pdf宝典

    流的概念简化了这些复杂操作,使得程序员能够更加专注于业务逻辑,而不是底层细节。 #### 二、JAVA中的流对象及其特性 JAVA提供了丰富的流对象来满足不同的需求,下面列举了一些主要的流对象及其特点: 1. **文件...

    Python库 | jetpack-io-0.5.1.dev202202111644601738.tar.gz

    Jetpack-io的出现,旨在提供一套简洁、高效的解决方案,使得开发者能够更专注于业务逻辑,而不是底层的数据传输细节。 在0.5.1.dev202202111644601738这个版本中,我们可以预见到可能包含了一些最新的特性、优化...

    io-interactive:交互式IO的实用程序

    在IT领域,交互式输入/输出(Input/Output,简称IO)是编程中不可或缺的一部分,尤其是在脚本语言如Perl中。...熟悉这些基本的Perl IO概念和"io-interactive"的特性,将有助于在日常开发中更加高效地实现交互式程序。

    java IO 流详细分析

    ### Java IO流详细分析 #### 一、Java IO流概述 在Java中,输入/输出(Input/...掌握Java IO流的基本概念和操作方法,对于开发高质量的应用程序至关重要。希望本文能帮助您更好地理解Java IO流的工作原理和使用方法。

    java中的IO流整理

    流的概念抽象了数据传输的过程,使得程序员可以不必关注底层实现细节。 2. 输入流:负责读取数据,如从文件、键盘、网络接收数据。 3. 输出流:负责写入数据,如向文件、显示器、网络发送数据。 二、字节流与字符...

    全面总结java IO体系

    1. **Java Io流的概念**: - 流是Java IO系统的基础,它将不同的输入/输出源抽象为一种统一的数据传输机制。流可以是输入流,用于从源头读取数据,也可以是输出流,用于向目标写入数据。在Java中,所有基本的流类型...

    java基础——IO流及File-RandomAccessFile对象.docx

    ### Java基础——IO流及File、RandomAccessFile对象 #### IO流概述 在Java中,IO流主要用于处理设备上的数据,这里的“流”可以被理解为数据的流动过程,即数据从一个地方移动到另一个地方的过程。Java中的IO流通过...

    squash.io-hosted-nodejs-app

    描述中的信息简洁,没有提供具体细节,所以我们只能根据标题推测这是一个用 Node.js 开发并托管在 squash.io 的应用。Squash.io 可能是一个平台,专门为开发者提供 Node.js 应用的托管服务,它可能提供了方便的部署...

    java之io流学习总结

    ### Java IO流学习总结 #### 一、Java中为什么提出流的概念? 在计算机科学中,数据经常需要在程序和外部设备之间传输。这些外部设备包括但不限于磁盘、网络连接甚至是键盘和屏幕。为了统一和简化这种数据交互的...

    RAPIDIO嵌入式系统互连_rapidio中文协议_rapidio嵌入式_

    1. **协议基础**:介绍 RapidIO 协议的基本概念,包括协议架构、数据包格式、地址映射和错误处理机制。 2. **物理层与接口**:解释不同物理层实现的细节,如电气接口标准、光接口标准,以及信号编码和解码。 3. **...

    IO知识总结

    在“IO原理.txt”这个文件名中,我们可以推测这是一个关于IO基础知识的文档,可能涵盖了上述的一些内容,包括流的概念、不同类型的流、缓冲技术、异常处理以及高级特性如NIO。 总的来说,IO知识是任何软件开发者都...

    外文翻译--Java IO 系统.doc

    流隐藏了实际IO设备内部数据处理的细节。在Java库中,IO类按照输入和输出进行了划分,这一点可以从JDK的类层次结构中看出。 输入流(InputStream)和输出流(OutputStream)构成了Java IO的基本骨架。它们是所有...

    javaIO代码

    Java IO API包括了流、字符集、缓冲、转换以及文件系统操作等概念。 1. **流的概念** 流是Java IO的核心,它代表数据的序列,可以用来读取或写入数据。流分为字节流和字符流两大类,字节流处理单个字节的数据,...

    java的IO操作

    流的概念帮助开发者屏蔽了底层I/O设备处理数据的具体细节,使得开发者能够更加专注于数据本身。 **I/O流的作用**:I/O流主要用于实现Java程序与外部世界的数据交换,这里的外部世界通常指的是文件系统、网络等。...

    新版Java_IO精讲(推荐版)

    - **流的概念**:流是一种连续的数据流,可以按先进先出的原则发送数据。 - **分类**: - **字节流**:处理字节级别的数据,适用于二进制文件的读写。 - **字符流**:处理字符级别的数据,更适用于文本文件的处理...

    io学习笔记

    ### IO基础概念 在计算机科学领域中,**IO**(Input/Output)指的是输入和输出操作。它是程序与外部世界交互的一种方式。IO操作涉及到数据读取、写入以及处理等过程。对于编程而言,掌握IO是非常重要的,因为几乎所有...

Global site tag (gtag.js) - Google Analytics