java IO流

本文详细介绍了Java中的io流,包括字节流(如InputStream、OutputStream和其子类)、字符流(如Reader、Writer和缓冲类)、文件流、缓冲流、对象流以及转换流的概念、使用示例和注意事项,展示了如何在Java中进行数据的读写操作。
摘要由CSDN通过智能技术生成

在Java中,io流主要包括输入流和输出流两种类型。输入流用于从外部读取数据到程序中,输出流用于将程序中的数据写入到外部。

1.字节流

在Java中,字节流是以字节为单位进行数据读写的流。常见的字节流类主要包括InputStream和OutputStream及它们的子类,用于读取和写入字节数据。

1.InputStream类:InputStream是所有输入字节流的抽象父类。常用的子类包括FileInputStream用于从文件中读取字节数据,ByteArrayInputStream用于从内存中读取字节数组数据等。

// 读取文件内容并打印到控制台
try (InputStream input = new FileInputStream("input.txt")) {
int data;
while ((data = input.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

2.OutputStream类:OutputStream是所有输出字节流的抽象父类。常用的子类包括FileOutputStream用于向文件中写入字节数据,ByteArrayOutputStream用于在内存中写入字节数组数据等。

// 将字符串写入文件
String str = "Hello, Java Byte Stream!";
try (OutputStream output = new FileOutputStream("output.txt")) {
output.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}

3.BufferedInputStream和BufferedOutputStream:这两个类提供了缓冲功能,可以提高读写数据的性能。在构造方法中传入一个输入流或输出流对象,可以自动创建一个缓冲区来提高读写速度。

// 使用BufferedInputStream读取文件内容
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"))) {
int data;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

// 使用BufferedOutputStream写入文件内容
String str = "Hello, Buffered OutputStream!";
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
bos.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}

2.字符流

在Java中,字符流是以字符为单位进行数据读写的流。字符流主要用于文本数据的读写,以字符为单位操作比字节更方便,更适合处理文本数据。常见的字符流类包括Reader和Writer及它们的子类,用于读取和写入字符数据。

1.Reader类:Reader是所有字符输入流的抽象父类。常用的子类包括FileReader用于从文件中读取字符数据,StringReader用于从字符串中读取字符数据等。

// 读取文件内容并打印到控制台
try (Reader reader = new FileReader("input.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

2.Writer类:Writer是所有字符输出流的抽象父类。常用的子类包括FileWriter用于向文件中写入字符数据,StringWriter用于将字符数据写入字符串中等。

// 将字符串写入文件
String str = "Hello, Java Character Stream!";
try (Writer writer = new FileWriter("output.txt")) {
writer.write(str);
} catch (IOException e) {
e.printStackTrace();
}

3.BufferedReader和BufferedWriter:这两个类提供了缓冲功能,可以提高读写数据的性能。在构造方法中传入一个Reader或Writer对象,可以自动创建一个缓冲区来提高读写速度。

// 使用BufferedReader读取文件内容
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}

// 使用BufferedWriter写入文件内容
String str = "Hello, Buffered Writer!";
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}

3.文件流

在Java中,文件流是指用于读写文件的流。文件流是字节流的一种,用于读取和写入文件中的字节数据。Java提供了FileInputStream和FileOutputStream类用于操作文件流,可以实现对文件的读写操作。

1.FileInputStream类:FileInputStream是用于从文件中读取字节数据的类。可以使用该类读取文件中的字节数据,并将数据写入到程序中。

// 使用FileInputStream读取文件内容并打印到控制台
try (FileInputStream fis = new FileInputStream("input.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

2.FileOutputStream类:FileOutputStream是用于向文件中写入字节数据的类。可以使用该类将程序中的字节数据写入到文件中。

// 使用FileOutputStream将字符串写入文件
String str = "Hello, Java File Stream!";
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
fos.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}

4.缓冲流

在Java中,缓冲流用于提高IO性能,通过在内存中设立一个缓冲区,在读写数据时可以减少对磁盘的频繁访问,从而提高读写效率。Java提供了BufferedInputStream和BufferedOutputStream用于字节流的缓冲处理,同时也提供了BufferedReader和BufferedWriter用于字符流的缓冲处理。

1.BufferedInputStream和BufferedOutputStream:这两个类用于字节流的缓冲处理,可以提高读写文件的性能。

// 使用BufferedInputStream从文件中读取字节数据
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"))) {
int data;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

// 使用BufferedOutputStream将字节数据写入文件
String str = "Hello, Buffered Output Stream!";
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
bos.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}

2.BufferedReader和BufferedWriter:这两个类用于字符流的缓冲处理,可以提高读写文本文件的性能。

// 使用BufferedReader从文件中读取文本数据
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}

// 使用BufferedWriter将文本数据写入文件
String str = "Hello, Buffered Writer!";
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}

5.对象流

在Java中,对象流是一种高级流,可以将Java对象以二进制形式写入到文件或从文件中读取出来。Java提供了ObjectInputStream和ObjectOutputStream类用于对象流的读写操作,这使得可以直接保存和读取Java对象,而无需手动进行对象序列化和反序列化。

1.ObjectOutputStream类:ObjectOutputStream用于将Java对象写入到输出流中。

// 使用ObjectOutputStream将Java对象写入到文件
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
// 创建一个Person对象
Person person = new Person("Alice", 25);

// 写入对象到文件
oos.writeObject(person);

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

2.ObjectInputStream类:ObjectInputStream用于从输入流中读取Java对象。

// 使用ObjectInputStream从文件中读取Java对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
// 读取对象并强制转换为Person对象
Person person = (Person) ois.readObject();

// 打印Person对象的信息
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());

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

需要注意的是,要将一个对象写入文件或从文件读取对象,该对象必须是实现了Serializable接口的类,否则会抛出NotSerializableException异常。同时,序列化后的对象可以在网络中传输,也可以在不同操作系统之间传输。

6.转换流

在Java中,转换流用于在字节流与字符流之间进行转换,为了方便操作字符数据,Java提供了InputStreamReader和OutputStreamWriter类,这两个类可以将字节流转换为字符流,从而实现字节流与字符流之间的桥接。

1.InputStreamReader:InputStreamReader是用于将字节输入流转换为字符输入流的类,可以指定字符集进行转换。

// 使用InputStreamReader转换字节流为字符流并读取文件内容
try (FileInputStream fis = new FileInputStream("input.txt");
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8)) {
int data;
while ((data = isr.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}

2.OutputStreamWriter:OutputStreamWriter是用于将字符输出流转换为字节输出流的类,可以指定字符集进行转换。

// 使用OutputStreamWriter转换字符流为字节流并将字符串写入文件
String str = "Hello, OutputStreamWriter!";
try (FileOutputStream fos = new FileOutputStream("output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
osw.write(str);
} catch (IOException e) {
e.printStackTrace();
}

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值