10、Java 基础 I/O 类库详解

I/O基础知识入门 前言 在我们开始学习netty之前,我们非常有必要先来简单的了解一下I/O相关的知识,因为netty所有的努力都是基于操作系统对I/O的不断优化和Java对这些能力的不断支持,所以我们在开始学习netty之前一定要先学习一下I/O相关的基础知识 概念解释 I/O I/O : I/O是Input和Output的缩写,意思就是输入/输出,根据操作对象的不同,可以分为内存I/O、磁盘I/O、网络I/O等,和Unix操作系统和Linux操作系统中,所有的组成元素都是一个文件,文件就是一种流的外在表现形式,对这些数 阅读详情

开篇概览:Java I/O 体系结构

Java 的输入输出(I/O)系统基于流(Stream) 模型,所有数据读写都通过流进行。java.io 包提供了丰富的类库,分为两大体系:

  1. 文件操作基础:File 类 —— 用于管理文件/目录元数据(路径、属性、创建/删除等),不涉及内容读写;
  2. 流式数据传输:
    • 字节流(Byte Streams):处理原始二进制数据(如图片、音频、视频),以 InputStream/OutputStream 为基类;
    • 字符流(Character Streams):专用于文本数据(自动处理字符编码),以 Reader/Writer 为基类;
    • 桥梁流(Bridge Streams):连接字节流与字符流(如 InputStreamReader);
    • 缓冲流(Buffered Streams):提升 I/O 效率。

⚠️ 重要前提:

  • File 不能读写文件内容,仅操作文件系统元信息;
  • 所有流操作后必须关闭资源,推荐使用 try-with-resources 自动管理。

一、File 类:文件与目录的抽象表示

1.1 核心功能

  • 表示文件或目录的路径(绝对/相对);
  • 创建/删除/重命名文件或目录;
  • 查询文件属性(大小、权限、是否存在等);
  • 不涉及文件内容读写。

1.2 常用构造方法与方法

方法说明
File(String pathname)通过路径字符串创建 File 对象
boolean exists()判断文件/目录是否存在
boolean isFile() / isDirectory()判断是否为文件/目录
long length()获取文件大小(字节)
boolean createNewFile()创建新文件(若不存在)
boolean mkdir() / mkdirs()创建目录(mkdirs() 可创建多级目录)
boolean delete()删除文件或空目录
String[] list() / File[] listFiles()列出目录内容

1.3 示例:File 类使用(详细中文注释)

import java.io.File;
import java.io.IOException;

public class FileDemo {
    public static void main(String[] args) {
        // 1. 创建 File 对象(表示一个文件路径)
        String filePath = "example.txt";
        File file = new File(filePath);

        // 2. 检查文件是否存在
        if (!file.exists()) {
            try {
                // 创建新文件(返回 true 表示创建成功)
                boolean created = file.createNewFile();
                System.out.println("文件创建成功: " + created);
            } catch (IOException e) {
                System.err.println("创建文件时发生错误: " + e.getMessage());
            }
        } else {
            System.out.println("文件已存在");
        }

        // 3. 获取文件基本信息
        System.out.println("文件名: " + file.getName());
        System.out.println("绝对路径: " + file.getAbsolutePath());
        System.out.println("是否为文件: " + file.isFile());
        System.out.println("文件大小(字节): " + file.length());

        // 4. 创建目录示例
        File dir = new File("testDir/subDir");
        if (dir.mkdirs()) { // mkdirs() 可创建多级目录
            System.out.println("目录创建成功: " + dir.getAbsolutePath());
        }

        // 5. 列出目录内容
        File parentDir = new File("."); // 当前目录
        if (parentDir.isDirectory()) {
            String[] files = parentDir.list(); // 获取文件名数组
            System.out.println("当前目录下的文件/目录:");
            for (String name : files) {
                System.out.println("  - " + name);
            }
        }

        // 6. 删除文件(程序结束前删除示例文件)
        // 注意:delete() 不能删除非空目录
        if (file.exists()) {
            boolean deleted = file.delete();
            System.out.println("文件删除成功: " + deleted);
        }
    }
}

✅ 关键点:

  • File 是平台无关的路径表示;
  • 路径分隔符使用 / 或 File.separator(避免硬编码 \);
  • delete() 无法删除非空目录(需先清空内容)。

二、字节流(Byte Streams):处理二进制数据

2.1 体系结构

InputStream(抽象基类)
├── FileInputStream       // 从文件读取字节
├── BufferedInputStream   // 带缓冲的输入流(提升效率)
└── ...(其他子类)

OutputStream(抽象基类)
├── FileOutputStream      // 向文件写入字节
├── BufferedOutputStream  // 带缓冲的输出流
└── ...(其他子类)

2.2 核心特点

  • 以 8 位字节(byte) 为单位读写;
  • 适用于所有类型数据(文本、图片、视频等);
  • 不处理字符编码。

2.3 示例:FileInputStream / FileOutputStream(复制图片)

import java.io.*;

public class ByteStreamDemo {
    public static void main(String[] args) {
        // 源文件(假设项目根目录有 input.jpg)
        String sourcePath = "input.jpg";
        // 目标文件
        String targetPath = "output.jpg";

        // 使用 try-with-resources 自动关闭流
        try (FileInputStream fis = new FileInputStream(sourcePath);
             FileOutputStream fos = new FileOutputStream(targetPath)) {

            byte[] buffer = new byte[1024]; // 缓冲区(1KB)
            int bytesRead;

            // 循环读取,直到返回 -1(表示文件结束)
            while ((bytesRead = fis.read(buffer)) != -1) {
                // 将读取的字节写入目标文件
                fos.write(buffer, 0, bytesRead);
            }

            System.out.println("图片复制成功!");

        } catch (FileNotFoundException e) {
            System.err.println("文件未找到: " + e.getMessage());
        } catch (IOException e) {
            System.err.println("I/O 错误: " + e.getMessage());
        }
    }
}

✅ 优化建议:

  • 使用缓冲区(如 byte[1024])避免频繁系统调用;
  • 永远不要用单字节读写(read()/write(int)),效率极低。

2.4 示例:BufferedInputStream / BufferedOutputStream(带缓冲的字节流)

import java.io.*;

public class BufferedByteStreamDemo {
    public static void main(String[] args) {
        try (// 包装 FileInputStream 为 BufferedInputStream
             BufferedInputStream bis = new BufferedInputStream(new FileInputStream("data.bin"));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.bin"))) {

            int data;
            // 逐字节读取(因有缓冲,实际效率高)
            while ((data = bis.read()) != -1) {
                bos.write(data);
            }
            // 缓冲流会在 close() 时自动 flush()

            System.out.println("二进制文件复制完成(使用缓冲流)");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

✅ 缓冲流优势:

  • 内部维护缓冲区,减少底层 I/O 调用次数;
  • BufferedOutputStream 在 close() 或 flush() 时强制写入数据。

三、字符流(Character Streams):处理文本数据

3.1 体系结构

Reader(抽象基类)
├── FileReader            // 从文件读取字符(使用默认编码)
├── BufferedReader        // 带缓冲的字符输入流
├── InputStreamReader     // 将字节流转换为字符流(可指定编码)
└── ...

Writer(抽象基类)
├── FileWriter            // 向文件写入字符(使用默认编码)
├── BufferedWriter         // 带缓冲的字符输出流
├── OutputStreamWriter    // 将字符流转换为字节流(可指定编码)
└── ...

3.2 核心特点

  • 以 16 位字符(char) 为单位读写;
  • 自动处理字符编码(如 UTF-8、GBK);
  • 仅适用于文本数据。

3.3 示例:FileReader / FileWriter(读写文本文件)

import java.io.*;

public class CharStreamDemo {
    public static void main(String[] args) {
        String textFile = "message.txt";

        // 1. 写入文本
        try (FileWriter writer = new FileWriter(textFile)) {
            writer.write("Hello, Java 字符流!\n");
            writer.write("这是第二行文本。");
            // FileWriter 会自动使用系统默认编码(如 Windows: GBK, Linux/macOS: UTF-8)
            System.out.println("文本写入完成");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 2. 读取文本
        try (FileReader reader = new FileReader(textFile)) {
            int ch;
            System.out.println("读取内容:");
            while ((ch = reader.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

⚠️ 问题:FileReader/FileWriter 无法指定编码,易导致乱码!


3.4 示例:InputStreamReader / OutputStreamWriter(指定编码)

import java.io.*;
import java.nio.charset.StandardCharsets;

public class BridgeStreamDemo {
    public static void main(String[] args) {
        String textFile = "utf8_message.txt";

        // 1. 使用 UTF-8 编码写入
        try (FileOutputStream fos = new FileOutputStream(textFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {

            osw.write("中文内容:Java I/O 支持 UTF-8 编码!\n");
            osw.write("English: UTF-8 is safe for multilingual text.");
            System.out.println("UTF-8 文本写入完成");

        } catch (IOException e) {
            e.printStackTrace();
        }

        // 2. 使用 UTF-8 编码读取
        try (FileInputStream fis = new FileInputStream(textFile);
             InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8)) {

            char[] buffer = new char[100];
            int charsRead;
            System.out.println("UTF-8 读取内容:");
            while ((charsRead = isr.read(buffer)) != -1) {
                System.out.print(new String(buffer, 0, charsRead));
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

✅ 最佳实践:

  • 永远显式指定编码(推荐 StandardCharsets.UTF_8);
  • 避免依赖系统默认编码(跨平台易乱码)。

3.5 示例:BufferedReader / BufferedWriter(高效文本处理)

import java.io.*;
import java.nio.charset.StandardCharsets;

public class BufferedCharStreamDemo {
    public static void main(String[] args) {
        String logFile = "app.log";

        // 1. 写入多行日志(使用 BufferedWriter)
        try (BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(logFile), StandardCharsets.UTF_8))) {

            writer.write("INFO: 应用启动");
            writer.newLine(); // 写入系统换行符(\n 或 \r\n)
            writer.write("DEBUG: 初始化配置完成");
            writer.newLine();
            writer.write("ERROR: 数据库连接失败");
            // BufferedWriter 会在 close() 时自动 flush()

            System.out.println("日志写入完成");

        } catch (IOException e) {
            e.printStackTrace();
        }

        // 2. 按行读取日志(使用 BufferedReader)
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(new FileInputStream(logFile), StandardCharsets.UTF_8))) {

            String line;
            System.out.println("日志内容:");
            while ((line = reader.readLine()) != null) { // readLine() 自动处理换行符
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

✅ BufferedReader 优势:

  • readLine() 方法简化文本行读取;
  • 内部缓冲提升性能;
  • 自动处理不同平台的换行符(\n, \r\n)。

四、I/O 流选择指南

需求推荐流
读写二进制文件(图片、视频)FileInputStream / FileOutputStream + Buffered 包装
读写文本文件(指定编码)InputStreamReader / OutputStreamWriter + Buffered 包装
按行处理文本BufferedReader(readLine())
高效写入多行文本BufferedWriter(write() + newLine())
避免乱码永远显式指定编码(如 StandardCharsets.UTF_8)

五、关键注意事项

5.1 资源管理

  • 必须关闭流!否则可能导致:
    • 文件句柄泄漏;
    • 缓冲数据未写入(BufferedOutputStream);
  • 推荐使用 try-with-resources(Java 7+):
    try (InputStream is = new FileInputStream("file.txt")) {
        // 使用流
    } // 自动调用 is.close()
    

5.2 编码问题

  • FileReader/FileWriter 使用系统默认编码,跨平台易乱码;
  • 始终使用 InputStreamReader/OutputStreamWriter 并指定编码。

5.3 性能优化

  • 避免单字节/字符读写;
  • 使用缓冲流(BufferedInputStream/BufferedReader);
  • 缓冲区大小通常设为 8KB~64KB(如 new byte[8192])。

六、总结

组件作用关键类
File文件/目录元操作File
字节流二进制数据读写FileInputStream, BufferedOutputStream
字符流文本数据读写FileReader, BufferedWriter
桥梁流字节流 ↔ 字符流InputStreamReader, OutputStreamWriter

📌 核心原则:
“文本用字符流(指定编码),二进制用字节流,永远用缓冲,资源自动关。”
掌握 Java I/O 基础,是处理文件、网络、数据库等数据传输场景的必备能力。

Java中的五种I/O模型详解 输入/输出(I/O)是计算机程序与外部环境(如文件、网络等)进行交互的方式。Java语言提供了多种I/O模型,帮助开发者处理数据读写和通信。本文将深入探讨Java中的五种I/O模型:阻塞I/O、非阻塞I/O、选择器I/O、NIO(New I/O)以及异步I/O,分析它们的工作原理、优缺点和适用场景,以帮助读者全面理解Java的I/O处理机制。 阅读详情

相关推荐

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3398

输入输出(I/O):熟悉 Java 的 I/O 类库,尤其是 NIO 和文件操作

NIO(New I/O)是 Java 1.4 引入的一组 API,旨在提供比传统 I/O 更高效的操作。它支持基于缓冲区和通道的 I/O 方式,能有效提高性能。基于流,采用阻塞方式,即每次只能处理一个连接。基于缓冲区和通道,支持非阻塞操作,并且能够处理多个 I/O 操作。通过本文,你了解了 Java I/O 的基础概念、常见类库及其用法,并深入探讨了 NIO 的核心特点与实际应用。传统 I/O适用于小规模、简单的 I/O 场景,使用简单直观。NIO。

qq_36534560的博客 1343

STM32H745xI双核芯片SMPS/LDO配置误区:从复位失败到精准排查的实战复盘

本文详细分析了STM32H745xI双核芯片在SMPS/LDO配置中的常见误区,特别是复位失败问题的排查过程。通过对比参考板与故障板的波形数据,揭示了电感选型不当导致的电源稳定性问题,并提供了硬件设计检查清单和调试技巧,帮助开发者避免类似陷阱。

weixin_42531588的博客 264

Java I/O流详解

Java I/O流 1、Java I/O流概述 IO就是输入、输出。Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的端的问题。我们可以将数据源和目的地理解为IO流的两端。 从一种数据源中通过InputStream流对象读入数据到程序内存中流程如图 1-1所示; 从程序内存中通过OutputStream流对象写入到目的地的流程图如图 1-2所示。 图 1-1 图 1-2 然后,除了面向字节流的InputSt

Window_mouse的博客 1万+

Gemini Enterprise免费试用攻略:解锁企业级AI平台的隐藏技巧与避坑指南

本文详细介绍了Gemini Enterprise免费试用的全流程攻略,包括注册优化、团队协作、资源管理和典型应用场景。通过解锁企业级AI平台的核心功能如Gemini 3.0 Pro模型和Nano Banana图像生成系统,帮助企业高效评估AI与业务的契合度。文章还提供了安全合规与数据管理的实用建议,确保试用过程顺畅无忧。

weixin_29233857的博客 657

Voronoi算法构建多晶

孪晶多晶 采用孪晶的原子链作为种子通过voronoi算法可以得到孪晶多晶结构。 孪晶种子: txt文件不需要特殊设置 box 150 150 150 random 8 得到孪晶多晶: 通过改变孪晶种子的长度可以得到不同孪晶片层厚度的多晶。 准二维柱晶 所有晶粒在某一维度的晶向一致,晶粒仅在平面内具有旋转关系,所有晶界为旋转对称晶界,这种结构的多晶其位错滑移在某些方向受限,但是能极大的提高晶粒...

yamatachi的博客 5278

I/O编程基础知识

编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象。“流”概念源于UNIX中的管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等,它屏蔽了实际的I/O设备中处理数据的细节。 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Inte

辙忆 3039

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

Java中的I/O系统

Java 提供了两种主要的 I/O API:传统的java.io和新的java.nio。前者适用于简单的 I/O 操作,而后者则适用于高效和非阻塞的 I/O 操作。理解并合理使用这两种 API,可以大大提高程序的 I/O 性能和灵活性。

2402_83919997的博客 1885

卸载Office 16 Click-to-Run Extensibility Component详细步骤

卸载Office 16 Click-to-Run Extensibility Component详细步骤 第一步:按住键盘上的“Win+R”,打开运行窗口 在运行窗口输入“Installer”回车,打开Installer文件夹 第二步:在Installer文件夹红框最右侧,即“大小”后面,右击选择“其他”,找到“主题”,勾选,点击“确定”,添加主题列成功 第三步:在“主题”列找到“Office 16 Click-to-Run Extensibility Component

M_try的博客 3万+

雷赛控制卡的扩展IO连接

因设备的上IO点较多,所以使用了多个雷赛32点位的IO扩展卡。上位机程序在控制输出IO时发现主模块IO和第一个扩展IO的输出可以控制。但第二个IO扩展卡和第三个IO扩展卡的输出控制不了。经排查出发现轴卡在初始化时只连接了第一个扩展IO卡。增加下面的代码连接上扩展IO就可以了。雷赛控制卡的扩展IO点无法控制问题处理。

StevenChen的博客 3165

Java NIO编程理论基础篇——Java I/O的发展以及linux网络I/O模型

发展简述: Java在jdk1.4之前,Java对I/O的支持并不完善,开发人员会遇到许多问题,例如: 没有数据缓冲区,性能较低; 没有C或者C++中的Channel概念,通常 ...

sdr_zd的博客 5677

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 484

Java I/O模型的演变:从阻塞I/O到异步I/O的底层机制解析

以上代码示例展示了各种I/O模型的基本用法,从阻塞I/O的简单粗暴,到异步I/O的高效并发,每种模型都有其适用的场景。理解这些模型的底层机制,可以帮助我们根据实际需求选择合适的I/O模型,编写出高性能、高并发的Java应用程序。I/O模型的演进是为了解决并发问题,选择哪种模型取决于具体场景。阻塞I/O简单但并发低,非阻塞I/O解决了阻塞但消耗CPU,I/O多路复用提高并发,异步I/O实现了真正的高效并发。

weixin_41455464的博客 1495

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java I/O 详解:基础、文件操作与 NIO 实践

Java I/O (输入输出) 是指用于读取和写入数据的 API,包括从文件、网络和其他数据源进行读取和写入操作。Java 提供了丰富的类和接口来实现各种 I/O 操作,主要包括标准 I/O、文件 I/O 和新 I/O (NIO)。

微笑听雨 5903

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java基础I/O

3.4 字符流通常一次会读取多个字符,比如一行字符,CopyLine.java 就是按行读取写入的例子,一串带有行终止符的字符称为一行。用了缓冲流呢,每次读取8192个字节,回来复制一下,write(int i)复制时呢就是一个字节一个字节复制的,write(byte[8192],0,len)就是每次复制8192个字节,当然最快。IO流代表的是一个数据输入的源或者输出的目标地址,可以是硬盘,内存,网络或者什么其他的电子设备,而IO流的类型也很多比如最简单的字节或者字符,或者其他更高级的对象。

lx18854869896的博客 1603

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java 的 I/O 类库的基本架构

Java 的 I/O 类库的基本架构 原文地址:https://developer.ibm.com/zh/articles/j-lo-javaio/ 目录Java 的 I/O 类库的基本架构前言:1、基于字节的 I/O 操作接口2、基于字符的 I/O 操作接口字节与字符的转化接口3、磁盘 I/O 工作机制4、Java Socket 的工作机制建立通信链路数据传输5、NIO 的工作方式BIO 带来的挑战NIO 的工作机制6、Buffer 的工作方式7、I/O 调优磁盘 I/O 优化性能检测提升 I/O 性能8

zyfhhhw的博客 218

Java的I/O演进之路

一、I/O 基础入门 Java1.4之前的早期版本,对I/O的支持并不完善,开发人员在开发java高性能IO程序的时候,会面临一些巨大的挑战和困难,主要问题如下: 没有数据缓存区,IO性能存在问题 没有C或者C++的Channel概念,只有输入、输出流 同步阻塞式I/O通信(BIO),通常会让通讯线程长时间的阻塞服务端的响应 支持的字符集有限,硬件可移植性不好 在Java支持异步通讯之前的很长一段时间里,一直都是C/C++长期占据着高性能服务端程序开发的语言,Java的同步阻塞式I/O一直被人们锁所诟病

csdn5215的博客 8016

Java 新I/O类库

// 新I/O类库 // 新的I/O类库,他们位于java.nio包中,其目的在于提高I/O操作的效率,nio是new io的缩写,包中引入4个关键的数据类型 // Buffer:缓冲区,临时存放输入或输出数据 // Charset:具有把Unicode字符编码转换为其他字符编码,以及把其他字符编码转换为Unicode字符编码的功能 // Channel:数据传输通道,能够把Buffer中

daiyuntao841226的专栏 734

Java的I/O类库的基本架构

Java的I/O类库的基本架构 Java的I/O操作类在java.io下,大概有将近80个类,这些类大概可以分成如下4组。 基于字节操作的I/O接口:InputStream和OutputStream 基于字符操作的I/O接口: Write和Reader 基于磁盘操作的I/O接口: File 基于网络操作的I/O接口: Socket I/O的核心问题要么是数据格式影响I/O操作,要么是传输方式影...

weixin_39984346的博客 242

Java的I/O历史

Java的I/O历史

AiFlutter的博客 1251

Java基础——I/O流

流是一种抽象的概念,它代表了数据的有序传输。就像水流一样,数据从一个源(如文件、网络连接)流向一个目标(如内存、另一个文件)。在Java中,流可以看作是一系列的数据序列,程序可以从流中读取数据(输入流),也可以向流中写入数据(输出流)。Java的I/O流提供了丰富的类和方法,用于处理各种数据传输需求。通过合理选择字节流、字符流、处理流和对象流,可以高效地完成文件读写、网络通信等任务。在使用I/O流时,要注意资源的正确关闭,避免资源泄漏。同时,要根据具体的应用场景选择合适的流类型,以提高程序的性能和可维护性。

jukuya的博客 995

java I/O和NI/O 详解

目录 I/O概述 字符流 字节流 理解I/O超类结构 FileInputStream详解  FileOutputStream详解 File类 新I/O Java NIO: Channels and Buffers Channels  NIO FileChannel SocketChannel ServerSocketChannel Buffers Java NIO: ...

topdeveloperr的博客 2940

Java的I/O模型

不同的I/O模型由于线程模型、API等差别很大,所以用法的差异也非常大。

fengshi95的博客 908

深入理解 java I/O

Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶颈。正因如此,所以 Java 在 I/O 上也一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性能。关于 NIO 我们将在后面详

Java 攻城狮~~ 1313
上一篇: 9、Java 泛型原理与使用详解
下一篇: 11、Java 8+ 核心新特性函数式编程详解
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值