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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


为什么代码按照视频抄的,但是复制不了图片,复制的图片几百M ,打不开,求解析

import java.io.*;
import java.net.*;

class  PicClient
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket("192.168.0.100", 10008);
                FileInputStream fis = new FileInputStream
                        ("D:\\班服图案\\44.bmp");
                OutputStream out = s.getOutputStream();
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len=fis.read(buf))!=-1)
                {
                        out.write(buf,0,len);
                }
                s.shutdownOutput();

                InputStream in = s.getInputStream();
                byte[] bufIn = new byte[1024];
                int num = in.read(bufIn);
                System.out.println(new String(bufIn,0,num));

                fis.close();
                s.close();
        }
}

class  PicServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10008);
                Socket s = ss.accept();
                System.out.println(s.getInetAddress().getHostAddress()+"....connected");
               
                InputStream in = s.getInputStream();

                FileOutputStream fos = new FileOutputStream("server.bmp");
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len=in.read())!=-1)
                {
                        fos.write(buf,0,len);
                }

                OutputStream out = s.getOutputStream();
                out.write("上传成功".getBytes());

                fos.close();
                s.close();
                ss.close();
        }
}



//为什么图片复制不成功,复制出来的图片几百M

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
请你先回答我,你有没有配好,你的本地地址。我才仔细看你敲的代码!
回复 使用道具 举报
import java.io.*;
import java.net.*;

class  PicClient
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket(InetAddress.getLocalHost().getHostAddress(), 10008);
                FileInputStream fis = new FileInputStream
                        ("D://JAVA//学习笔记//布局管理器.jpg");
                OutputStream out = s.getOutputStream();
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len=fis.read(buf))!=-1)
                {
                        out.write(buf,0,len);
                        out.flush();
                }
                s.shutdownOutput();

                InputStream in = s.getInputStream();
                byte[] bufIn = new byte[1024];
                int num = in.read(bufIn);
                System.out.println(new String(bufIn,0,num));

                fis.close();
                s.close();
        }
}

class  PicServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10008);
                Socket s = ss.accept();
                System.out.println(s.getInetAddress().getHostAddress()+"....connected");
               
                InputStream in = s.getInputStream();

                FileOutputStream fos = new FileOutputStream("server.jpg");
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len=in.read(buf))!=-1)//楼主你这里read方法没有读入缓冲区,len=in.read()返回的是一个字节
//所以你原来得到的那个几十M的文件,读取的都是缓冲数组buf里面N多的默认值,所以得到的文件就什么也看不见而且很大
//另外在测试的时候还有一个有趣的问题,服务端的流对象加了刷新方法比不加刷新所得到的文件占用空间要小,但是文件大小是一样的,有点疑惑,希望能有高人解
//答???

                {
                        fos.write(len);
                        fos.flush();
                }

                OutputStream out = s.getOutputStream();
                out.write("上传成功".getBytes());

                fos.close();
                s.close();
                ss.close();
        }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
李志阳 发表于 2012-12-23 16:28
import java.io.*;
import java.net.*;

可以百度一下, 这样的原因是因为但在存储的时候却是以簇为分配单元,即一个簇中不能包含两个文件的内容,也就是说无论一个文件有多小,哪怕它只有一个字节,一旦它占用了一个簇,那么别的文件就不能再写入这个簇了,也就是说这个簇中其它还未用上的空间就被浪费了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马