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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一蓑烟雨任平生 中级黑马   /  2012-4-8 13:47  /  3686 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
import java.net.*;
class PicClient
{
        public static void main(String[] args)throws Exception
        {
                Socket s=new Socket("192.168.1.100",8001);
                BufferedInputStream fis=new BufferedInputStream(new FileInputStream("何洁 陈楚生 - 经过.mp3"));
                BufferedOutputStream os=new BufferedOutputStream(s.getOutputStream());
                int len=0;
                while((len=fis.read())!=-1)
                {
                        os.write(len);
                }
                s.shutdownOutput();
                InputStream is=s.getInputStream();
                byte[] buf=new byte[1024];
                len=is.read(buf);
                System.out.println(new String(buf,0,len));
                s.close();
        }
}
class PicServer
{
        public static void main(String[] args)throws Exception
        {
                ServerSocket ss=new ServerSocket(8001);
                Socket s=ss.accept();
                System.out.println(s.getInetAddress().getHostAddress());
                BufferedInputStream is=new BufferedInputStream(s.getInputStream());
                BufferedOutputStream fos=new BufferedOutputStream(new FileOutputStream("1.mp3"));
                int len=0;
                while((len=is.read())!=-1)
                {
                        fos.write(len);
                }
                OutputStream os=s.getOutputStream();
                os.write("上传成功!".getBytes());
                s.close();
                ss.close();
        }
}
原MP3是3,906,143 字节,传送完后的MP3是3,891,200 字节,数据在那里丢失的啊?

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

6 个回复

倒序浏览
这个问题比较有意思的,出问题的原因是:你忽略了图片,文本和音频数据在传输过程中都是以字节传输的,所以你最好用字节输入和输出流FileInputStream和FileOutputStream来传送,这样保证不会出错,你试试吧,我上次也是遇到这样的问题,有人告诉我用基本的字节输入输出流来做一定可以,我试了,结果真的是那样

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
邓海涛 发表于 2012-4-8 14:11
这个问题比较有意思的,出问题的原因是:你忽略了图片,文本和音频数据在传输过程中都是以字节传输的,所以 ...

我用基本字节输入和输出做来,没问题,但一加缓冲区就出问题,郁闷。。。
回复 使用道具 举报
图片,音频等媒体文件都时二进制文件  所以需要使用字节流,而字符流操作的都是文本文件。
回复 使用道具 举报
一蓑烟雨任平生 发表于 2012-4-8 23:35
我用基本字节输入和输出做来,没问题,但一加缓冲区就出问题,郁闷。。。 ...


楼上兄弟说得很正确的,很多东西你只能用最基本的啊,不然就会出问题,原先我也一直也为加个缓冲区应该没问题啊,可是实践证明啊,只能用最基本的字节输入输出流进行读写
回复 使用道具 举报
让人半夜上厕所都要打开电脑再看一遍的好帖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马