ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/30 6:23:45 拓冰建站 浏览量
java IO操作 你快速认识IO的相关基本知识 I/O输入/输出(Input/Output)不同的I/O方式有不同的实现方式和性能在不同的应用中可以按情况选择不同的I/O方式。输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换。在当下的各种存储产品中按照速度从快到慢应该就是内存闪存磁盘磁带。Java 中通过 java.io.File 类来对一个文件包括目录进行抽象的描述.(io即input和output)。通过File对象来描述一个具体的文件,可以对应到一个真实存在的文件,也可以对应到一个不存在的文件.文件的分类文件可以分为文本文件和二进制文件。平时我们在记事本中编辑的内容就属于文本文件平时看到的图片文件如果不借助其他专业的软件是不能对图片进行编辑查看的用记事本打开后看到一堆乱码此时它里面存储的就是二进制内容。Java中的IO模型主要有三种1、BIOBlocking IO同步阻塞式IO是比较常用的IO模型特点是编写相对简单应用程序发起 read 调用后会一直阻塞直到内核把数据拷贝到用户空间。这种模型在客户端链接数量比较少的情况是可以的如果一旦数量上来达到万级别时就会出现问题。2、NIONonblocking IOJava 中的 NIO 于 Java 1.4 中引入对应java.nio包提供了Channel,SelectorBuffer等抽象。NIO 中的 N 可以理解为 Non-blocking不单纯是 New。它是支持面向缓冲的基于通道的 I/O 操作方法。 对于高负载、高并发的网络应用应使用 NIO 。Java 中的 NIO 可以看作是 I/O 多路复用模型。也有很多人认为Java 中的 NIO 属于同步非阻塞 IO 模型。3、AIOAsynchronous IOAIO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO 模型。异步 IO 是基于事件和回调机制实现的也就是应用操作之后会直接返回不会堵塞在那里当后台处理完成操作系统会通知相应的线程进行后续的操作。目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO不过又放弃了。这是因为Netty 使用了 AIO 之后在 Linux 系统上的性能并没有多少提升。IO模型https://www.processon.com/view/6675082c5cb8e56220a4eb57?utm_sourceyingyingjava中IO流的分类按照数据单位字节流Byte Streams和字符流Character Streams- 字节流Byte Stream用于处理二进制数据适合处理图像、音频和其他非文本数据。例如FileInputStream和FileOutputStream是字节流的典型代表。- 字符流Character Stream用于处理文本数据适合处理字符集编码的文本文件。例如FileReader和FileWriter是字符流的典型代表。按照传输的方向:输入流input Stream)和输出流output Stream)- 输入流Input Stream用于从外部源读取数据。常见的输入流类包括InputStream和Reader的子类。- 输出流Output Stream用于将数据写入外部目标。常见的输出流类包括OutputStream和Writer的子类。Java IO结构https://www.processon.com/view/58579498e4b0f767284d1e98?utm_sourceyingyingjava中文件的具体操作在整个Java.io包中最重要的有5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader一个接口指的是Serializable. 主要的类如下File文件File类是对文件系统中文件以及文件夹进行封装的对象可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名判断指定文件是否存在、获得当前目录中的文件列表创建、删除文件和目录等方法。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合并为一个OutStream4、Reader文件操作抽象类用于读取字符流。它是所有字符输入流的父类可以读取字符数组、字符串等。5、Writer文件操作抽象类用来将字符或字符串写入到输出流中。6、RandomAccessFile随机文件操作既可以读取文件内容也可以向文件输出数据。同时RandomAccessFile 支持“随机访问”的方式程序快可以直接跳转到文件的任意地方来读写数据。字符流Reader的结构https://www.processon.com/view/53f03b9a0cf2dddac7f2c0f0?utm_sourceyingyingJava IO流https://www.processon.com/view/6087c0ae63768966e83aee2f?utm_sourceyingying