Java字符流和字节流
在Java中,字符流和字节流是两种用于处理输入和输出的流。它们的主要区别在于处理数据的单位和适用场景。下面将详细介绍这两种流的概念、特点、使用场景以及代码示例。
字节流是以字节为单位进行输入和输出的流。它适用于处理所有类型的I/O,包括文本、图像、音频等。字节流的主要类是InputStream
和OutputStream
。
FileInputStream
:用于从文件中读取字节。FileOutputStream
:用于向文件中写入字节。import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
String sourceFile = "source.txt";
String destFile = "dest.txt";
// 写入字节流
try (FileOutputStream fos = new FileOutputStream(destFile)) {
String data = "Hello, Byte Stream!";
fos.write(data.getBytes()); // 将字符串转换为字节并写入
} catch (IOException e) {
e.printStackTrace();
}
// 读取字节流
try (FileInputStream fis = new FileInputStream(sourceFile)) {
int byteData;
while ((byteData = fis.read()) != -1) {
System.out.print((char) byteData); // 将字节转换为字符并打印
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流是以字符为单位进行输入和输出的流。它主要用于处理文本数据。字符流的主要类是Reader
和Writer
。
FileReader
:用于从文件中读取字符。FileWriter
:用于向文件中写入字符。import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharacterStreamExample {
public static void main(String[] args) {
String sourceFile = "source.txt";
String destFile = "dest.txt";
// 写入字符流
try (FileWriter fw = new FileWriter(destFile)) {
String data = "Hello, Character Stream!";
fw.write(data); // 直接写入字符
} catch (IOException e) {
e.printStackTrace();
}
// 读取字符流
try (FileReader fr = new FileReader(sourceFile)) {
int charData;
while ((charData = fr.read()) != -1) {
System.out.print((char) charData); // 直接打印字符
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在选择使用字节流还是字符流时,通常建议根据数据的类型来选择。如果处理的是文本数据,使用字符流更为合适;如果处理的是二进制数据,则应使用字节流。