免费注册
流程类
图形化表达方式
脑图类
结构化表达方式
笔记类
高效化表达方式
软件与系统设计
UML
工程与技术设计
数据分析与研究
其他图形
自由结构
树形图
括号图
默认模式

java IO操作 你快速认识IO的相关基本知识

ProcessOn阳光 1月前
479
ProcessOn,立刻提升你的工作效率
首页 知识社区 java IO操作 你快速认识IO的相关基本知识

   I/O输入/输出(Input/Output),不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换。在当下的各种存储产品中,按照速度从快到慢应该就是内存>闪存>磁盘>磁带。Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述.(io即input和output)。通过File对象来描述一个具体的文件,可以对应到一个真实存在的文件,也可以对应到一个不存在的文件.文件的分类:文件可以分为文本文件和二进制文件。平时我们在记事本中编辑的内容就属于文本文件;平时看到的图片文件如果不借助其他专业的软件是不能对图片进行编辑查看的,用记事本打开后看到一堆乱码,此时它里面存储的就是二进制内容。

Java中的IO模型主要有三种

1、BIO(Blocking IO):

同步阻塞式IO,是比较常用的IO模型,特点是编写相对简单,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。这种模型在客户端链接数量比较少的情况是可以的,如果一旦数量上来达到万级别时,就会出现问题。

2、NIO(Nonblocking IO):

Java 中的 NIO 于 Java 1.4 中引入,对应 java.nio 包,提供了 Channel , SelectorBuffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它是支持面向缓冲的,基于通道的 I/O 操作方法。 对于高负载、高并发的(网络)应用,应使用 NIO 。Java 中的 NIO 可以看作是 I/O 多路复用模型。也有很多人认为,Java 中的 NIO 属于同步非阻塞 IO 模型。

3、AIO(Asynchronous IO):

AIO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO 模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty 使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。

IO模型 

java中IO流的分类

按照数据单位:

字节流(Byte Streams)和字符流(Character Streams)

- 字节流(Byte Stream):用于处理二进制数据,适合处理图像、音频和其他非文本数据。例如,FileInputStreamFileOutputStream是字节流的典型代表。

- 字符流(Character Stream):用于处理文本数据,适合处理字符集编码的文本文件。例如,FileReaderFileWriter是字符流的典型代表。

按照传输的方向:

输入流(input Stream)和输出流(output Stream)

- 输入流(Input Stream):用于从外部源读取数据。常见的输入流类包括InputStreamReader的子类。

- 输出流(Output Stream):用于将数据写入外部目标。常见的输出流类包括OutputStreamWriter的子类。

Java IO结构

java中文件的具体操作

在整个Java.io包中最重要的有5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable. 主要的类如下:

  1. File(文件):File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。
  2. InputStream(二进制操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
  3. 常用的方法:

    1.public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。

    2.public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的 

    3. public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。

     4. public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,

     5. public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 

    6. public int close( ) :我们在使用完后,必须对我们打开的流进行关闭. 

    主要的子类:

    1. FileInputStream把一个文件作为InputStream,实现对文件的读取操作 

    2. ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用 

    3. StringBufferInputStream:把一个String对象作为InputStream

     4. PipedInputStream:实现了pipe的概念,主要在线程中使用 5. SequenceInputStream:把多个InputStream合并为一个InputStream

3、OutputStream(二进制操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

   常用的方法:

1. public void write(byte b[ ]):将参数b中的字节写到输出流。 

2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。 

4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。 

5. public void close( ) : 关闭输出流并释放与流相关的系统资源。 

主要的子类:

1. ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 

2. FileOutputStream:把信息存入文件中 

3. PipedOutputStream:实现了pipe的概念,主要在线程中使用 4. SequenceOutputStream:把多个OutStream合并为一个OutStream

4、Reader(文件操作):抽象类,用于读取字符流。它是所有字符输入流的父类,可以读取字符数组、字符串等。

5、Writer(文件操作):抽象类,用来将字符或字符串写入到输出流中。

6、RandomAccessFile(随机文件操作):既可以读取文件内容,也可以向文件输出数据。同时RandomAccessFile 支持“随机访问”的方式,程序快可以直接跳转到文件的任意地方来读写数据。

字符流Reader的结构 

Java IO流 

以上图片内容来自ProcessOn 模板社区,你可以点击此链接查看详情。如果你想要将自己的知识结构化记录下来,ProcessOn 是你的绝佳选择,提供多种专业图形的绘制工具和丰富的模板内容,支持工作、学习和生活各个方面的应用。

免费在线协同思维导图流程图 免费使用