Java 使用BufferedOutputStream没有flush()导致文本文件内容缺失

编程入门 行业动态 更新时间:2024-10-26 21:26:37

Java 使用BufferedOutputStream没有flush()导致文本文件内容<a href=https://www.elefans.com/category/jswz/34/1762865.html style=缺失"/>

Java 使用BufferedOutputStream没有flush()导致文本文件内容缺失

学习Java网络编程遇到的问题如下:

1.利用BufferedOutputStream给服务端传送文本文件没有使用bos.flush(),服务端能成功接收文本文件但内容为空;

2.服务端利用BufferedOutputStream保存文本文件没有使用bos.flush(),文本文件内容也会为空;

3.二者缺一不可

原因:使用BufferedOutputStream,缓冲区会暂存数据,直到缓冲区满才输出/写入,要强制缓冲区立即写入,调用bos.flush()就可以要求缓冲区立马把内容输出/写入;关闭输出流,缓冲区也会立马把内容输出/写入。

正确传送文本文件的代码如下:

import java.io.*;
import java.Socket;public class Client {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1",10086);//InputStream读取文件BufferedInputStream bis=new BufferedInputStream(new FileInputStream("net\\file\\22.txt"));//创建输出流OutputStreamBufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());//将文件读到字节数组后输出byte[] bytes=new byte[1024];int len;//read(byte[] data);从输入流里面读取若干字节装填到给定的数组里面//如果输入流中字节足够则填满,否则只装填前面的部分.返回实际装填长度while((len=bis.read(bytes))!=-1){  //输入流读入bos.write(bytes,0,len);  //输出流输出}bos.flush();  //刷新此缓冲的输出流//使用outputstream写文件没有bos.flush();会导致文本文件内容缺失socket.shutdownOutput();  //关闭输出流//打开输入流接收反馈信息BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));String str=br.readLine();System.out.println(str);//关闭通道socket.close();}
}
import java.io.*;
import java.ServerSocket;
import java.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10086);Socket socket=ss.accept();//输入流接收文件BufferedInputStream bis=new BufferedInputStream(socket.getInputStream());//输出流保存文件BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("net\\fileout\\22.txt"));//在输入流读取文件到字节数组再用输出流保存文件byte[] bytes=new byte[1024];int len;while((len=bis.read(bytes))!=-1){bos.write(bytes,0,len);}bos.flush();  //刷新此缓冲的输出流//使用outputstream写文件没有bos.flush();会导致文本文件内容缺失//打开输出流发送反馈信息BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功!");bw.newLine();  //写入一个行分隔符bw.flush();socket.close();ss.close();}
}

更多推荐

Java 使用BufferedOutputStream没有flush()导致文本文件内容缺失

本文发布于:2023-11-15 01:10:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1591024.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:缺失   文本文件   内容   Java   BufferedOutputStream

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!