Java essay Java essay
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)

Mr.Fire

全栈工程师
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)
  • Java基础

    • 认识Java语言
    • Java环境搭建
    • 第一个Java程序
    • Java基础语法
    • Java数据类型
    • Java修饰符
    • Java面向对象
    • Java输入输出流
      • 概述
      • 常用输入流
      • 常用输出流
      • 示例代码
      • 常用方法
      • 注意事项
      • 序列化和反序列化
        • ObjectInputStream和ObjectOutputStream
        • DataInputStream和DataOutputStream
        • 区别
      • 总结
    • Java字符串
    • Java集合
    • Java多线程编程
    • Java网络编程
    • 线程之间如何进行通讯
  • Java进阶

  • 设计模式

  • 多线程

  • 你不知道的小事

  • Java基础
  • Java基础
Mr.Fire
2024-05-02
目录

Java输入输出流

# 概述

Java的输入输出流用于读取和写入字节数据。Java的输入输出流分为输入流和输出流,输入流用于读取字节数据,输出流用于写入字节数据。Java的输入输出流类位于java.io包中。

# 常用输入流

  • InputStream:所有输入流的基类,用于读取字节数据。
  • FileInputStream:从文件中读取字节。
  • BufferedInputStream:提供缓冲功能的输入流。
  • DataInputStream:提供对基本数据类型和对象进行序列化和反序列化的输入流。
  • ObjectInputStream:提供对对象进行序列化和反序列化的输入流。
  • ByteArrayInputStream:从字节数组中读取字节。
  • ......

# 常用输出流

  • OutputStream:所有输出流的基类,用于写入字节数据。
  • FileOutputStream:向文件中写入字节。
  • BufferedOutputStream:提供缓冲功能的输出流。
  • DataOutputStream:提供对基本数据类型和对象进行序列化和反序列化的输出流。
  • ObjectOutputStream:提供对对象进行序列化和反序列化的输出流。
  • ByteArrayOutputStream:向字节数组中写入字节。
  • ......

# 示例代码

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try {
            // 写入文件
            FileOutputStream fos = new FileOutputStream("test.txt");
            fos.write("Hello, world!".getBytes());
            fos.close();

            // 读取文件
            FileInputStream fis = new FileInputStream("test.txt");
            int data = 0;
            while ((data = fis.read())!= -1) {
                System.out.print((char) data);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 常用方法

  • read():从输入流中读取一个字节。
  • read(byte[] b):从输入流中读取字节数组。
  • read(byte[] b, int off, int len):从输入流中读取字节数组的某一部分。
  • skip(long n):跳过输入流中的n字节。
  • available():返回输入流中可读取的字节数。
  • close():关闭输入流。
  • flush():刷新输出流。
  • write(int b):向输出流中写入一个字节。
  • write(byte[] b):向输出流中写入字节数组。
  • write(byte[] b, int off, int len):向输出流中写入字节数组的某一部分。
  • close():关闭输出流。

# 注意事项

  • 输入流和输出流都需要通过close()方法关闭。
  • 输入流和输出流都可以用try-catch块来捕获异常。
  • 输入流和输出流都可以用available()方法获取可读取的字节数。
  • 输入流和输出流都可以用flush()方法刷新缓冲区。

# 序列化和反序列化

Java的序列化和反序列化是指将对象转换为字节序列,并在需要时恢复对象。Java提供了ObjectOutputStream和ObjectInputStream类来实现序列化和反序列化。

  • ObjectOutputStream:用于序列化对象。
  • ObjectInputStream:用于反序列化对象。
  • DataInputStream:用于反序列化基本数据类型和对象。
  • DataOutputStream:用于序列化基本数据类型和对象。

# ObjectInputStream和ObjectOutputStream

示例代码:

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try {
            // 序列化
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.txt"));
            oos.writeObject(new Person("Tom", 20));
            oos.close();

            // 反序列化
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt"));
            Person person = (Person) ois.readObject();
            System.out.println(person.getName() + " " + person.getAge());
            ois.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class Person implements Serializable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# DataInputStream和DataOutputStream

示例代码:

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try {
            // 序列化
            DataOutputStream dos = new DataOutputStream(new FileOutputStream("test.txt"));
            dos.writeUTF("Hello, world!");
            dos.writeInt(123456);
            dos.close();

            // 反序列化
            DataInputStream dis = new DataInputStream(new FileInputStream("test.txt"));
            String str = dis.readUTF();
            int num = dis.readInt();
            System.out.println(str + " " + num);
            dis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 区别

  • 序列化和反序列化是指将对象转换为字节序列,并在需要时恢复对象。
  • ObjectOutputStream和ObjectInputStream类用于对象实现序列化和反序列化。
  • DataInputStream和DataOutputStream类用于对基本数据类型和对象进行序列化和反序列化。

# 总结

  • Java的输入输出流用于读取和写入字节数据。
  • 输入流和输出流分别由InputStream和OutputStream类表示。
  • 常用的输入流包括FileInputStream、BufferedInputStream、ObjectInputStream、ByteArrayInputStream和DataInputStream。
  • 常用的输出流包括FileOutputStream、BufferedOutputStream、ObjectOutputStream、ByteArrayOutputStream和DataOutputStream。
最后更新时间: 2025/01/02, 14:49:49
Java面向对象
Java字符串

← Java面向对象 Java字符串→

最近更新
01
SuperBuilder
12-29
02
30岁我该怎么办
12-29
03
关于存钱
12-29
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Mr.Fire | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式