Java字节流 #
一、InputStream #
1.1 常用方法 #
java
public abstract class InputStream {
int read(); // 读取一个字节
int read(byte[] b); // 读取到字节数组
int read(byte[] b, int off, int len); // 读取指定范围
long skip(long n); // 跳过n个字节
int available(); // 可读取的字节数
void close(); // 关闭流
}
1.2 FileInputStream #
java
try (FileInputStream fis = new FileInputStream("test.txt")) {
// 读取单个字节
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
// 读取到字节数组
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
}
1.3 BufferedInputStream #
java
try (BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("test.txt"))) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
}
1.4 ByteArrayInputStream #
java
byte[] data = "Hello World".getBytes();
try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
int b;
while ((b = bais.read()) != -1) {
System.out.print((char) b);
}
}
二、OutputStream #
2.1 常用方法 #
java
public abstract class OutputStream {
void write(int b); // 写入一个字节
void write(byte[] b); // 写入字节数组
void write(byte[] b, int off, int len); // 写入指定范围
void flush(); // 刷新缓冲区
void close(); // 关闭流
}
2.2 FileOutputStream #
java
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
// 写入单个字节
fos.write(65); // 'A'
// 写入字节数组
byte[] data = "Hello World".getBytes();
fos.write(data);
// 写入指定范围
fos.write(data, 0, 5); // "Hello"
fos.flush();
}
2.3 BufferedOutputStream #
java
try (BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("output.txt"))) {
bos.write("Hello World".getBytes());
bos.flush();
}
2.4 ByteArrayOutputStream #
java
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
baos.write("Hello".getBytes());
baos.write(" World".getBytes());
byte[] result = baos.toByteArray();
System.out.println(new String(result)); // Hello World
}
三、文件复制 #
3.1 基本复制 #
java
public static void copy(String src, String dest) throws IOException {
try (FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
}
3.2 使用缓冲流 #
java
public static void copyWithBuffer(String src, String dest) throws IOException {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest))) {
byte[] buffer = new byte[8192];
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
}
}
3.3 使用Files(Java 7+) #
java
import java.nio.file.Files;
import java.nio.file.Paths;
Files.copy(Paths.get("src.txt"), Paths.get("dest.txt"));
四、DataInputStream/DataOutputStream #
4.1 写入基本类型 #
java
try (DataOutputStream dos = new DataOutputStream(
new FileOutputStream("data.bin"))) {
dos.writeInt(100);
dos.writeDouble(3.14);
dos.writeBoolean(true);
dos.writeUTF("Hello");
}
4.2 读取基本类型 #
java
try (DataInputStream dis = new DataInputStream(
new FileInputStream("data.bin"))) {
int i = dis.readInt();
double d = dis.readDouble();
boolean b = dis.readBoolean();
String s = dis.readUTF();
System.out.println(i + ", " + d + ", " + b + ", " + s);
}
五、总结 #
| 流 | 说明 |
|---|---|
| FileInputStream | 文件输入流 |
| FileOutputStream | 文件输出流 |
| BufferedInputStream | 缓冲输入流 |
| BufferedOutputStream | 缓冲输出流 |
| ByteArrayInputStream | 字节数组输入流 |
| ByteArrayOutputStream | 字节数组输出流 |
| DataInputStream | 数据输入流 |
| DataOutputStream | 数据输出流 |
字节流要点:
- 使用缓冲流提高性能
- 使用try-with-resources自动关闭
- 注意flush刷新缓冲区
最后更新:2026-03-26