Java IO流详解

Java IO详解 IO即Input和Output,即输入和输出。这里的输入和输出都是相对于内存来说的。 阅读详情

一、File类

1. File类概述

是什么?

  • java.io.File类是文件和目录路径名的抽象表示

  • 用于创建、删除、重命名、查询文件和目录

  • 注意:File类不能访问文件内容本身,需要IO流

路径表示:

  • 相对路径:相对于当前项目的路径

  • 绝对路径:从盘符开始的完整路径

  • 路径分隔符:

    • Windows:\` 或/`

    • Linux/Unix:/

    • 通用:File.separator

2. 构造方法

// 1. 通过路径字符串创建
File file1 = new File("D:/test/test.txt");
File file2 = new File("test.txt");  // 相对路径

// 2. 通过父路径和子路径字符串创建
File file3 = new File("D:/test", "test.txt");

// 3. 通过父File对象和子路径字符串创建
File parentDir = new File("D:/test");
File file4 = new File(parentDir, "test.txt");

3. 常用方法

创建功能
// 创建目录
boolean mkdir();      // 创建单级目录,父目录必须存在
boolean mkdirs();     // 创建多级目录,父目录不存在会自动创建

// 创建文件
boolean createNewFile();  // 创建新文件,文件不存在才创建

// 示例
File dir = new File("D:/a/b/c");
if (!dir.exists()) {
    boolean result = dir.mkdirs();  // 创建多级目录
    System.out.println("目录创建结果:" + result);
}

File file = new File("D:/a/b/c/test.txt");
if (!file.exists()) {
    boolean result = file.createNewFile();  // 创建文件
    System.out.println("文件创建结果:" + result);
}
判断功能
boolean exists();         // 文件或目录是否存在
boolean isDirectory();    // 是否是目录
boolean isFile();         // 是否是文件
boolean isHidden();       // 是否是隐藏文件
boolean canRead();        // 是否可读
boolean canWrite();       // 是否可写
boolean canExecute();     // 是否可执行
boolean isAbsolute();     // 是否是绝对路径
获取功能
String getAbsolutePath();     // 获取绝对路径
String getPath();            // 获取相对路径
String getName();            // 获取文件或目录名
String getParent();          // 获取父目录路径
File getParentFile();        // 获取父目录File对象
long length();              // 获取文件大小(字节),目录返回0
long lastModified();        // 获取最后修改时间(毫秒值)

// 目录相关
String[] list();                     // 获取目录下所有文件和目录名
File[] listFiles();                  // 获取目录下所有文件和目录的File对象
File[] listFiles(FileFilter filter); // 使用过滤器获取
File[] listFiles(FilenameFilter filter);

// 示例:遍历目录
File dir = new File("D:/test");
if (dir.exists() && dir.isDirectory()) {
    File[] files = dir.listFiles();
    for (File f : files) {
        System.out.println(f.getName());
    }
}
删除和重命名功能
boolean delete();  // 删除文件或空目录
boolean renameTo(File dest);  // 重命名或移动文件

// 注意:delete()方法
// 1. 删除目录时,目录必须为空
// 2. 删除操作不进回收站
// 3. 返回布尔值表示删除是否成功

二、IO流体系结构

1. IO流分类

按数据流向分:
    输入流:读取数据(从文件/网络到内存)
    输出流:写入数据(从内存到文件/网络)

按数据类型分:
    字节流:以字节为单位(8位),可处理所有类型文件
    字符流:以字符为单位(16位),只能处理文本文件

按功能分:
    节点流:直接从数据源/目的地读写
    处理流(包装流):对节点流进行包装,提供缓冲等功能

2. 完整体系结构

字节流(Byte Streams - 处理所有类型文件)
    InputStream(抽象类)
        ├─ FileInputStream(文件字节输入流)
        ├─ ByteArrayInputStream(字节数组输入流)
        ├─ FilterInputStream(过滤流)
        │    ├─ BufferedInputStream(缓冲字节输入流)
        │    ├─ DataInputStream(数据输入流)
        │    └─ PushbackInputStream(回退输入流)
        ├─ ObjectInputStream(对象输入流)
        ├─ PipedInputStream(管道输入流)
        └─ SequenceInputStream(序列输入流)

    OutputStream(抽象类)
        ├─ FileOutputStream(文件字节输出流)
        ├─ ByteArrayOutputStream(字节数组输出流)
        ├─ FilterOutputStream(过滤流)
        │    ├─ BufferedOutputStream(缓冲字节输出流)
        │    ├─ DataOutputStream(数据输出流)
        │    └─ PrintStream(打印流)
        ├─ ObjectOutputStream(对象输出流)
        └─ PipedOutputStream(管道输出流)

字符流(Character Streams - 处理文本文件)
    Reader(抽象类)
        ├─ FileReader(文件字符输入流)
        ├─ InputStreamReader(字节流转字符流)
        │    └─ BufferedReader(缓冲字符输入流)
        ├─ CharArrayReader(字符数组输入流)
        ├─ StringReader(字符串输入流)
        ├─ PipedReader(管道字符输入流)
        └─ FilterReader
             └─ PushbackReader(回退字符输入流)

    Writer(抽象类)
        ├─ FileWriter(文件字符输出流)
        ├─ OutputStreamWriter(字节流转字符流)
        │    └─ BufferedWriter(缓冲字符输出流)
        ├─ CharArrayWriter(字符数组输出流)
        ├─ StringWriter(字符串输出流)
        ├─ PipedWriter(管道字符输出流)
        └─ FilterWriter
             └─ PrintWriter(打印字符流)

三、字节流详解

1. InputStream(抽象类)

核心方法:

int read();                          // 读取一个字节,返回-1表示结束
int read(byte[] b);                  // 读取到字节数组,返回读取字节数
int read(byte[] b, int off, int len); // 读取指定长度到字节数组
void close();                        // 关闭流
int available();                     // 返回可读字节数
long skip(long n);                   // 跳过n个字节
void mark(int readlimit);           // 标记当前位置
void reset();                       // 重置到标记位置
boolean markSupported();            // 是否支持标记

2. FileInputStream

// 构造方法
FileInputStream(File file)
FileInputStream(String name)
FileInputStream(FileDescriptor fdObj)

// 示例1:读取单个字节
try (FileInputStream fis = new FileInputStream("test.txt")) {
    int data;
    while ((data = fis.read()) != -1) {
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 示例2:读取到字节数组(推荐,效率高)
try (FileInputStream fis = new FileInputStream("test.txt")) {
    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, len));
    }
} catch (IOException e) {
    e.printStackTrace();
}

3. OutputStream(抽象类)

核心方法:

void write(int b);                    // 写入一个字节
void write(byte[] b);                 // 写入字节数组
void write(byte[] b, int off, int len); // 写入字节数组的一部分
void close();                         // 关闭流
void flush();                         // 刷新缓冲区

4. FileOutputStream

// 构造方法
FileOutputStream(File file)
FileOutputStream(File file, boolean append)  // append=true表示追加
FileOutputStream(String name)
FileOutputStream(String name, boolean append)

// 示例1:写入单个字节
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
    String str = "Hello, World!";
    for (char c : str.toCharArray()) {
        fos.write(c);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 示例2:写入字节数组
try (FileOutputStream fos = new FileOutputStream("output.txt", true)) {
    String str = "Hello, World!\n";
    fos.write(str.getBytes());
} catch (IOException e) {
    e.printStackTrace();
}

5. 字节流文件复制

// 基本复制
try (FileInputStream fis = new FileInputStream("source.jpg");
     FileOutputStream fos = new FileOutputStream("copy.jpg")) {
    byte[] buffer = new byte[8192];  // 8KB缓冲区
    int len;
    while ((len = fis.read(buffer)) != -1) {
        fos.write(buffer, 0, len);
    }
    System.out.println("文件复制完成");
} catch (IOException e) {
    e.printStackTrace();
}

四、字符流详解

1. Reader(抽象类)

核心方法:

int read();                          // 读取一个字符
int read(char[] cbuf);               // 读取到字符数组
int read(char[] cbuf, int off, int len);
void close();
long skip(long n);
boolean ready();                     // 是否准备好读取
void mark(int readAheadLimit);
void reset();
boolean markSupported();

2. FileReader

// 构造方法
FileReader(File file)
FileReader(String fileName)
FileReader(FileDescriptor fd)

// 示例
try (FileReader fr = new FileReader("test.txt")) {
    char[] buffer = new char[1024];
    int len;
    while ((len = fr.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, len));
    }
} catch (IOException e) {
    e.printStackTrace();
}

3. Writer(抽象类)

核心方法:

void write(int c);                    // 写入一个字符
void write(char[] cbuf);              // 写入字符数组
void write(char[] cbuf, int off, int len);
void write(String str);               // 写入字符串
void write(String str, int off, int len);
void close();
void flush();                        // 刷新缓冲区

4. FileWriter

// 构造方法
FileWriter(File file)
FileWriter(File file, boolean append)
FileWriter(String fileName)
FileWriter(String fileName, boolean append)
FileWriter(FileDescriptor fd)

// 示例
try (FileWriter fw = new FileWriter("output.txt", true)) {
    fw.write("Hello, World!\n");
    fw.write("这是第二行\n");
    fw.flush();  // 立即刷新缓冲区
} catch (IOException e) {
    e.printStackTrace();
}

五、处理流(包装流)

1. 缓冲流

特点:​ 自带缓冲区,提高读写效率

BufferedInputStream
// 构造方法
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)  // 指定缓冲区大小

// 示例
try (BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream("largefile.dat"))) {
    byte[] buffer = new byte[8192];
    int len;
    while ((len = bis.read(buffer)) != -1) {
        // 处理数据
    }
} catch (IOException e) {
    e.printStackTrace();
}
BufferedOutputStream
// 构造方法
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out, int size)

// 示例
try (BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("output.dat"))) {
    byte[] data = "Hello".getBytes();
    bos.write(data);
    bos.flush();  // 确保数据写入
} catch (IOException e) {
    e.printStackTrace();
}
BufferedReader
// 构造方法
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)

// 特有方法
String readLine();  // 读取一行,返回null表示结束

// 示例:逐行读取
try (BufferedReader br = new BufferedReader(
        new FileReader("test.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
BufferedWriter
// 构造方法
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)

// 特有方法
void newLine();  // 写入换行符,跨平台

// 示例
try (BufferedWriter bw = new BufferedWriter(
        new FileWriter("output.txt"))) {
    bw.write("第一行");
    bw.newLine();  // 跨平台换行
    bw.write("第二行");
    bw.flush();
} catch (IOException e) {
    e.printStackTrace();
}

2. 转换流

作用:​ 字节流和字符流之间的桥梁

InputStreamReader
// 构造方法
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, String charsetName)  // 指定编码
InputStreamReader(InputStream in, Charset cs)

// 示例:解决乱码问题
try (InputStreamReader isr = new InputStreamReader(
        new FileInputStream("test.txt"), "GBK")) {
    char[] buffer = new char[1024];
    int len;
    while ((len = isr.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, len));
    }
} catch (IOException e) {
    e.printStackTrace();
}
OutputStreamWriter
// 构造方法
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
OutputStreamWriter(OutputStream out, Charset cs)

// 示例
try (OutputStreamWriter osw = new OutputStreamWriter(
        new FileOutputStream("output.txt"), "UTF-8")) {
    osw.write("Hello, 世界!");
} catch (IOException e) {
    e.printStackTrace();
}

3. 数据流

作用:​ 读写基本数据类型

DataInputStream
try (DataInputStream dis = new DataInputStream(
        new FileInputStream("data.dat"))) {
    int intValue = dis.readInt();
    double doubleValue = dis.readDouble();
    boolean boolValue = dis.readBoolean();
    String strValue = dis.readUTF();
} catch (IOException e) {
    e.printStackTrace();
}
DataOutputStream
try (DataOutputStream dos = new DataOutputStream(
        new FileOutputStream("data.dat"))) {
    dos.writeInt(100);
    dos.writeDouble(3.14);
    dos.writeBoolean(true);
    dos.writeUTF("Hello");
} catch (IOException e) {
    e.printStackTrace();
}

4. 对象流

作用:​ 序列化和反序列化对象

ObjectOutputStream
// 序列化
class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    // 构造方法、getter、setter省略
}

try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("person.dat"))) {
    Person person = new Person("张三", 20);
    oos.writeObject(person);
} catch (IOException e) {
    e.printStackTrace();
}
ObjectInputStream
// 反序列化
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("person.dat"))) {
    Person person = (Person) ois.readObject();
    System.out.println(person.getName());
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

5. 打印流

特点:​ 不会抛出IOException,自动flush

PrintStream
// System.out就是PrintStream
PrintStream ps = new PrintStream("log.txt");
ps.println("日志信息");
ps.printf("当前时间:%tF %<tT%n", new Date());
ps.close();
PrintWriter
try (PrintWriter pw = new PrintWriter(
        new FileWriter("output.txt"))) {
    pw.println("第一行");
    pw.printf("价格:%.2f元%n", 99.99);
} catch (IOException e) {
    e.printStackTrace();
}

六、NIO.2(JDK7+)

1. Path接口

// 创建Path
Path path1 = Paths.get("D:/test/test.txt");
Path path2 = Paths.get("D:", "test", "test.txt");
Path path3 = FileSystems.getDefault().getPath("D:/test/test.txt");

// 常用方法
System.out.println(path1.getFileName());  // 文件名
System.out.println(path1.getParent());     // 父目录
System.out.println(path1.getRoot());       // 根目录
System.out.println(path1.getNameCount());  // 名称元素数量
System.out.println(path1.getName(0));      // 第i个名称元素

2. Files工具类

// 文件操作
Path source = Paths.get("source.txt");
Path target = Paths.get("target.txt");

// 复制文件
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);

// 移动文件
Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);

// 删除文件
Files.deleteIfExists(target);

// 判断文件属性
boolean exists = Files.exists(path);
boolean isDir = Files.isDirectory(path);
boolean isHidden = Files.isHidden(path);
boolean isReadable = Files.isReadable(path);
boolean isWritable = Files.isWritable(path);

// 读取文件
byte[] bytes = Files.readAllBytes(path);
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

// 写入文件
Files.write(path, "内容".getBytes());
Files.write(path, Arrays.asList("第一行", "第二行"), 
           StandardCharsets.UTF_8);

// 遍历目录
try (Stream<Path> stream = Files.list(Paths.get("D:/test"))) {
    stream.forEach(System.out::println);
}

七、IO流使用总结

1. 选择流的准则

文本文件:使用字符流
二进制文件:使用字节流
需要缓冲:使用缓冲流
需要特定编码:使用转换流
读写基本数据类型:使用数据流
读写对象:使用对象流
需要序列化:实现Serializable接口

2. 性能优化建议

// 1. 使用缓冲区
try (BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream("file.dat"));
     BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("copy.dat"))) {
    // 处理逻辑
}

// 2. 选择合适的缓冲区大小(通常8KB-32KB)
byte[] buffer = new byte[8192];  // 8KB

// 3. 使用try-with-resources自动关闭资源
try (FileInputStream fis = new FileInputStream("file.txt")) {
    // 自动关闭
}

// 4. 批量读写,减少IO操作次数

3. 编码问题处理

// 指定编码读取
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(
            new FileInputStream("file.txt"), 
            "UTF-8"))) {
    // 读取
}

// 指定编码写入
try (BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
            new FileOutputStream("file.txt"), 
            "UTF-8"))) {
    // 写入
}

4. 常见问题解决

// 文件复制优化
public static void copyFile(String src, String dest) throws IOException {
    try (InputStream in = new BufferedInputStream(
            new FileInputStream(src));
         OutputStream out = new BufferedOutputStream(
            new FileOutputStream(dest))) {
        
        byte[] buffer = new byte[8192];
        int length;
        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }
        out.flush();
    }
}

// 读取大文件
public static void readLargeFile(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(
            new FileReader(filename))) {
        String line;
        while ((line = br.readLine()) != null) {
            // 处理每一行
        }
    }
}

八、常见面试题

  1. File类的作用是什么?

  2. 字节流和字符流的区别?

  3. 为什么要使用缓冲流?

  4. 如何选择IO流?

  5. 序列化和反序列化是什么?

  6. 如何解决中文乱码问题?

  7. try-with-resources的好处?

  8. NIO和传统IO的区别?

  9. 如何提高IO性能?

  10. Files类相比File类有什么优势?

这个IO流总结详细介绍了Java IO体系的所有重要类和方法,包括文件操作、各种流的使用、性能优化和常见问题的解决方案,适合发布到优快云等技术博客平台。

【JAVA基础】Java IO详解 Java IO 阅读详情

相关推荐

JSD-2204-API-JavaIO-Day02

API-JavaIO

TheNewSystrm的博客 827

Java中的IO流(最详细解说)

IO流一、File类的使用1.常用构造器2.路径分隔符3.常用方法二、IO流原理及流的分类1.Java IO原理三、流的分类1.输入流(1)InputStream & Reader(2)InputStream(3)Reader2.输出流(1)OutputStream & Writer(2)OutputStream(3)Writer3.节点流(1)读取文件1.字符读取FileReader (read(char[] cbuf))2.字节读取FileInputStream (read(byte

spade_Kwo的博客 9605

Java中的IO流详解

Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。​ |-----FileChannel:处理本地文件。

Welisit的博客 1055

Java io流 详解

"IO流"(Input/Output stream)指的是Java中用于处理输入输出(I/O)数据的机制。在Java中,所有的输入和输出都被抽象为“流”对象,并通过输入流读取数据、输出流写入数据。Java的I/O包提供了丰富的类和方法来支持不同类型的流,输入流和输出流之间可以自由地进行转换。它们分别主要包括字节流和字符流两种类型。其中,字节流是操作二进制数据的流,可以处理任何类型的数据,常见的例如InputStream和OutputStream;

m0_68987535的博客 5369

保姆级教程:手把手调试PX4Ctrl的油门映射与姿态控制(附ROS节点配置)

本文提供PX4Ctrl的深度调参指南,涵盖油门映射、姿态控制及ROS节点配置等关键环节。通过详细解析PX4控制器的核心逻辑、递归最小二乘法(RLS)参数估计及状态机设计,帮助开发者优化无人机飞控性能。附实战案例与安全调试建议,适合PX4开发者进阶学习。

weixin_30363981的博客 382

KiCad自动布线实战:FreeRouting插件安装与使用指南

在PCB设计流程中,布线环节往往占据大量重复性工作,尤其对于中小型双面板,成百上千条飞线的手动连接既繁琐又易出错。自动布线技术通过算法在给定设计规则和元件布局的基础上自动规划走线路径,能显著提升布线效率。FreeRouting作为一款开源自动布线器,与KiCad通过DSN/SES标准中间格式无缝配合,让工程师将精力集中于关键信号和布局优化,而将常规网络交给工具处理。本文从自动布线的原理与边界出发,讲解了FreeRouting的安装、DSN导出、参数设置、自动布线及结果回传的完整流程,并结合实际案例展示了在S

weixin_32025789的博客 277

【Java IO流】IO流详解

IO,即InputOutput,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接Java中是通过流处理IO的,那么什么是流?流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道当Java程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当Java程序需要写入数据的时候,就会开启一个通向目的地的流。

m0_55908255的博客 1695

GD32H7实战:5步搞定YOLO轻量化模型部署到MCU(附避坑指南)

本文详细介绍了如何将YOLO轻量化模型部署到GD32H7 MCU的完整实战流程。通过五个关键步骤,涵盖环境搭建、模型训练、格式转换到工程集成,并重点分享了使用GD32AI-ModelZoo工具链进行MCU部署的避坑指南,帮助开发者在资源受限的边缘设备上实现高效目标检测。

weixin_29070861的博客 445

Java 常用IO流操作详解

IO流大家肯定不陌生,简单整理了一下常用IO流基本用法,其他的IO流以后有时间在整理。 1.基本概念IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。2.IO流的分类图示:(主要IO流) 3.字节流(1).字节流基类1).InputStreamInputStream:字节输入流基类,抽象类是表示字节输入流的所有

MAGIC 3万+

【OpenClaw从入门到精通】第07篇:2026实测!零基础开发OpenClaw自定义Skill——招聘外呼自动邀约完整教程

本文聚焦OpenClaw自定义Skill开发全流程,针对现成技能无法满足个性化场景(如专属招聘流程、内部系统对接)的痛点,以“招聘外呼自动邀约”为实战案例,从概念认知、环境搭建、分步开发到测试优化,手把手教读者从零构建自定义Skill。内容涵盖Skill目录结构、SKILL.md核心配置、Python主逻辑实现、API对接、安全配置等关键环节,融入2026年ClawHavoc事件安全警示,强调最小权限、凭证安全等开发原则。所有代码经实测可运行,步骤详尽且兼顾新手友好与进阶需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1193

PyRoki:机器人运动学优化库入门教程

PyRoki:模块化机器人运动学优化工具包 本文介绍了PyRoki,一个模块化、可扩展且跨平台的机器人运动学优化工具包。PyRoki通过统一变量和成本函数接口,简化了逆运动学、轨迹优化和运动重定向等任务的实现,支持CPU、GPU和TPU加速。实验表明,PyRoki在批量逆运动学任务中比现有GPU加速库cuRobo快1.4-1.7倍,且收敛误差更低。其模块化设计支持快速集成新成本函数,并通过交互式可视化工具优化参数配置。PyRoki开源发布,为机器人运动优化提供了灵活高效的解决方案。

机器人控制与仿真应用 1291

JAVA—IO流详解

IO:Input/Output即输入&输出,也称之为流(河流,水流),指的是数据从一个地点到另一个地点过程;对于计算机来说文件的拷贝过程,文件的编写保存,显示功能都是使用到IO;将数据的传输过程看做一个输入输出。现实角度考虑可以将耳朵作为输入流,将嘴巴当做输出流输入输出介质:文件网络键盘(输入)显示器(输出)

weixin_48006490的博客 8624

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 997

【Java】各种IO流知识详解

Java IO流是Java编程中用于处理输入输出操作的核心机制,它提供了一套统一的接口来处理不同类型的数据源和目标。无论是文件操作、网络通信还是内存数据处理,IO流都扮演着关键角色。IO流(Input/Output Stream)是Java中用于数据传输的抽象概念。流代表了一个有序的数据序列,数据可以从一个地方流向另一个地方。IO流的设计模式采用了装饰器模式,通过组合不同的流来实现复杂的功能。Java IO流主要分为两大类:字节流和字符流,每种又分为输入流和输出流。 具体分类 字节流:处理二进制数据,如图

WizLC 970

UE4打包为Framework库嵌入iOS原生工程

UE4打包为Framework库嵌入iOS原生工程

tangfuling1991的博客 1294

中小企业办公网络配置综合实验华为设备(NAT+策略路由+OSPF+VLAN)

组网需求: 1、PC1、2、3、4均可以访问internet的lo0:8.8.8.8 2、PC1、PC4通过电信ISP访问internet;PC2、PC3通过联通ISP访问internet; 需求分析: 1、internet路由器模拟公网,8.8.8.8模拟公网IP;电信ISP、联通ISP路由器模拟电信和联通运营商;出口路由为企业出口路由器;这四个路由器直连链路之间运行ospf,配置动态路由,实现互通; 2、出口路由与三层交换直连链路运行ospf,动态同步路由信息; 3、出口路由器内网端口配..

A soul tortured by desire 7124

java IO流详解

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓JavaIO流详解,做好准备了么,那么开始吧 🌲🌲🐴🐴

weixin_62275996的博客 1235

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java IO 流详解与示例

IO(Input/Output)流是 Java 中用于处理输入和输出操作的机制,它让程序能够读取外部数据(如文件、键盘输入),或将数据输出到外部设备(如文件、屏幕)。

ABCDjseu114514的博客 552

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

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java的IO流详解

1.基本概念 IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。 2.IO流的分类 图示:(主要IO流) 3.字节流 (1).字节流基类 1).InputStream InputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。 常用方法: // 从输入流...

weixin_40159122的博客 177

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java之IO流详解

IO流 1.概述 IO流用于处理设备之间的数据传输,Java对数据的操作是通过流的方式。 流按流向分为两种:输入流和输出流。 流按操作类型分为两种: 字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字符流:字符流只能操作纯字符数据,比较方便。 2.字节流 2.1.FileInputStream FileInputStream fileInputStream=new...

along 204

Java的IO流详解

Java的IO流详解流的概念和作用IO流的分类IO程序的书写流程字节输出流与字节输入流的用法字节输出流OutputStream字节输入流InputStream字节输入流与字节输出流的结合使用达到文件的复制效果字符流的用法字符输出流Writer字符输入流Reader字符流实现复制字节流与字符流之间的转换 流的概念和作用 流是一组有顺序的,有始有终的字节集合,是对数据传输的总称或抽象。即数据的传输称为...

guo12345555的博客 221
上一篇: Java集合框架详解
下一篇: Java反射机制详解
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值