Java文件读写实战:BufferedInputStream/OutputStream与Base64传输方案
本文深入讲解Java IO操作中BufferedInputStream与BufferedOutputStream的使用细节,包含完整的读写代码示例,并重点剖析通过Base64进行二进制文件网络传输的标准化处理流程,助您高效掌握文件I/O与数据序列化技术。
一、读文件BufferedInputStream
BufferedInputStream必须传入一个InputStream(一般是FileInputStream),利用内部缓冲区减少系统调用次数,从而提升读取性能。
常用方法:
- 从该输入流中读取一个字节:
public int read(); - 从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中:
public int read(byte[] b,int off,int len)
应用实例:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
/**
* BufferedInputStream:缓冲输入流
* FileInputStream:文件输入流
*/
public class FileReadToString {
public static void main(String[] args){
try {
// 使用try-with-resources管理资源自动关闭更安全,此处保留原逻辑仅演示核心原理
FileInputStream fis=new FileInputStream("WynnNi.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
String content=null;
//自定义缓冲区
byte[] buffer=new byte[10240];
int flag=0;
while((flag=bis.read(buffer))!=-1){
content+=new String(buffer, 0, flag);
}
System.out.println(content);
//关闭的时候只需要关闭最外层的流就行了
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}二、写文件BufferedOutputStream
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
常用方法:
- //向输出流中输出一个字节
public void write(int b); - //将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
public void write(byte[] b,int off,int len); - //刷新此缓冲的输出流。这迫使所有缓冲的输出字节被写出到底层输出流中。
public void flush();
应用实例
/**
* BufferedOutputStream:缓冲输出流
* FileOutPutStream:文件输出流
*/
public class StringOutPutToFile {
public static void main(String[] args){
try {
FileOutputStream fos=new FileOutputStream("WynnNi.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
String content="xxxxxxxxx!";
bos.write(content.getBytes(),0,content.getBytes().length);
bos.flush();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}三、实际应用场景
在许多分布式系统中,被调用方需要将文件传输给调用方并在本地输出文件。由于许多网络通信协议(如HTTP JSON Body)对二进制数据的直接传输支持有限,通常采用Base64编码进行中转。
操作流程如下:
- 被调用方将文件读入缓冲区byte[]
- 将缓冲区数据转换成String传递,
String str = Base64.getEncoder().encodeToString(bytes); - 接收方将String反转为byte[],
bytes=Base64.getDecoder().decode(str); - 接收方将缓冲区输出到文件
总结
以上就是《JAVA文件读写操作详解》的详细内容,更多关于JAVA文件读写操作的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









