在Java中,字节流主要用于读取和写入二进制数据。两个最基本的字节流类是InputStream
和OutputStream
,分别代表输入字节流和输出字节流。以下是一些常用的字节流实践例子:
FileInputStream 和 FileOutputStream
这些是用于文件I/O的字节流类。FileInputStream
用于从文件中读取数据,FileOutputStream
用于向文件写入数据。
读取文件示例
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("example.txt");
int content;
while ((content = fis.read()) != -1) {
// content 是读取的字节数据,可以直接处理或者转换成char显示
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
写入文件示例
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("example.txt");
String text = "Hello, World!";
byte[] textAsBytes = text.getBytes();
fos.write(textAsBytes);
System.out.println("Write to file completed.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
BufferedInputStream 和 BufferedOutputStream
这些类提供缓冲功能来提升I/O性能。BufferedInputStream
和BufferedOutputStream
分别包装一个InputStream
和OutputStream
,并为它们提供缓冲区。
使用缓冲读取文件示例
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputStreamExample {
public static void main(String[] args) {
BufferedInputStream bis = null;
try {
FileInputStream fis = new FileInputStream("example.txt");
bis = new BufferedInputStream(fis);
int content;
while ((content = bis.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用缓冲写入文件示例
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamExample {
public static void main(String[] args) {
BufferedOutputStream bos = null;
try {
FileOutputStream fos = new FileOutputStream("example.txt");
bos = new BufferedOutputStream(fos);
String text = "Hello, Buffered World!";
byte[] textAsBytes = text.getBytes();
bos.write(textAsBytes);
System.out.println("Write to file completed.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.flush(); //确保所有数据都从缓冲区写入
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
在使用字节流时,要注意以下几点:
- 总是在一个
finally
块中关闭流,以确保即使发生异常也会释放资源。 - 对于输出流,调用
flush()
可以确保所有数据都被写出到目标。 - 使用缓冲流可以提升大文件的读写效率。
- 要确保正确处理异常,避免资源泄漏。
- 字节流可以用于任何形式的原始数据,如图片、音频、视频等二进制文件。
以上就是Java中字节流的基本使用示例。通过这些示例,你可以进行更复杂的文件处理操作,根据实际需要进行适当的扩展和修改。