字节流和字符流是Java IO中的两种基本流类型。字节流以字节为单位读取和写入数据,而字符流以字符为单位读取和写入数据。下面分别详细介绍这两种流类型。
一、字节流
字节流是以字节为单位进行读取和写入数据的流。它是以 InputStream 和 OutputStream 为基础的。InputStream 是字节输入流的基础类,它的子类有 ByteArrayInputStream、FileInputStream、PipedInputStream 和 FilterInputStream 等。OutputStream 是字节输出流的基础类,它的子类有 ByteArrayOutputStream、FileOutputStream、PipedOutputStream 和 FilterOutputStream 等。
字节流的读取和写入都是以字节为单位的,所以它适用于读取和写入二进制文件或图片等。由于字节流是以字节为单位进行读取和写入,所以在读写文件的时候需要注意编码方式,否则可能会出现乱码。
下面是一个示例代码:
```java
import java.io.*;
public class ByteStreamExample {
public static void main(String[] args) {
try {
// 写入文件
OutputStream os = new FileOutputStream("test.txt");
String str = "Hello, byte stream!";
byte[] bytes = str.getBytes();
os.write(bytes);
os.close();
// 读取文件
InputStream is = new FileInputStream("test.txt");
int length = is.available();
byte[] buffer = new byte[length];
is.read(buffer);
String content = new String(buffer);
System.out.println(content);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
二、字符流
字符流是以字符为单位进行读取和写入数据的流。它是以 Reader 和 Writer 为基础的。Reader 是字符输入流的基础类,它的子类有 FileReader、CharArrayReader、PipedReader 和 BufferedReader 等。Writer 是字符输出流的基础类,它的子类有 FileWriter、CharArrayWriter、PipedWriter 和 BufferedWriter 等。
字符流的读取和写入都是以字符为单位的,所以它适用于读取和写入文本文件。由于字符流是以字符为单位进行读取和写入,所以在读写文件的时候不需要考虑编码方式,这是它与字节流的一个显著区别。
下面是一个示例代码:
```java
import java.io.*;
public class CharacterStreamExample {
public static void main(String[] args) {
try {
// 写入文件
Writer writer = new FileWriter("test.txt");
String str = "Hello, character stream!";
writer.write(str);
writer.close();
// 读取文件
Reader reader = new FileReader("test.txt");
int length = reader.ready();
char[] buffer = new char[length];
reader.read(buffer);
String content = new String(buffer);
System.out.println(content);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
总结:
字节流和字符流是Java IO中的两种基本流类型,它们分别以字节和字符为单位进行读取和写入数据。字节流适用于读取和写入二进制文件或图片等,而字符流适用于读取和写入文本文件。在读写文件时需要考虑编码方式,字节流需要注意编码方式以避免出现乱码,而字符流则不需要。