黑马程序员技术交流社区
标题:
小细节让我足足郁闷了三小时. ---BufferedOutputStream
[打印本页]
作者:
范龙彬
时间:
2011-11-25 11:38
标题:
小细节让我足足郁闷了三小时. ---BufferedOutputStream
本帖最后由 范龙彬 于 2011-11-25 14:14 编辑
网络编程...中上传图片代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Test7 {
public static void main(String[]args) throws IOException{
Socket s =new Socket("127.0.0.1",10003);
BufferedInputStream bufi =new BufferedInputStream(new FileInputStream("d:\\123.jpg"));
BufferedOutputStream bufo =new BufferedOutputStream(s.getOutputStream());
byte [] buf =new byte[1024];
int len =0;
while((len=bufi.read(buf))!=-1){
bufo.write(buf,0,len);
}
s.shutdownOutput();
BufferedInputStream bufr =new BufferedInputStream(s.getInputStream());
byte [] nuf =new byte [1024];
bufr.read(nuf);
System.out.println(new String(nuf));
}
}
class PicServe{
public static void main(String[]args) throws IOException{
ServerSocket ss =new ServerSocket(10003);
Socket s= ss.accept();
System.out.println(s.getLocalAddress());
BufferedInputStream bufi =new BufferedInputStream(s.getInputStream());
byte [] buf =new byte[1024];
int len =0;
BufferedOutputStream bufo =new BufferedOutputStream(new FileOutputStream("D:\\345.jpg"));
while((len =bufi.read(buf))!=-1){
bufo.write(buf,0,len);
}
/* OutputStream out =s.getOutputStream();
out.write("上传成功".getBytes());*/
BufferedOutputStream bufoo =new BufferedOutputStream(s.getOutputStream());
bufoo.write("上传成功".getBytes());
bufoo.flush(); //
小小的一个刷新足足让我郁闷三小时..
}
}
OutputStream 的write方法可以自动刷新
经过测试 查找相关文档发现 BufferedOutputStream 为了节约了计算机资源,避免每次都调用一次写入流的操作 .加入了一个byte[] 数组 ..这里要注意的是它不具备自动刷新功能.大家小心..
可能是因为上面的问题秀住大脑了,有一个问题一直没有想通
这段代码出现了数据丢失..
3.52M的文件上传完却变成了 3.5M 为什么 求解
该贴已经同步到 范龙彬的微博
作者:
刘一扬
时间:
2011-11-25 11:45
传输的时候没刷流,导致数据丢失,没有传递到目的端
while((len=bufi.read(buf))!=-1){
bufo.write(buf,0,len);
bufo.flush(); //刷流
}
while((len =bufi.read(buf))!=-1){
bufo.write(buf,0,len);
bufo.flush(); //刷流
}
作者:
幽雅
时间:
2014-5-3 18:04
:)路过 看看
作者:
yang649981273
时间:
2014-9-6 21:05
flush():赞,我也卡在这卡半天,看了你的我才弄出来这里和视频有一些出入?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2