A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 范龙彬 于 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  为什么  求解

该贴已经同步到 范龙彬的微博

3 个回复

倒序浏览
传输的时候没刷流,导致数据丢失,没有传递到目的端
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();                //刷流
                }

回复 使用道具 举报
:)路过  看看
回复 使用道具 举报
flush():赞,我也卡在这卡半天,看了你的我才弄出来这里和视频有一些出入?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马