图像文件未完全复制

时间:2014-08-11 09:01:01

标签: java

我正在使用以下程序从服务器获取文件:

 public static void main(String[] argv) throws Exception {
        Socket sock = new Socket("127.0.0.1", 12345);
        byte[] mybytearray = new byte[1024];
        InputStream is = sock.getInputStream();
        FileOutputStream fos = new FileOutputStream("E://cy.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int bytesRead = is.read(mybytearray, 0, mybytearray.length);
        bos.write(mybytearray, 0, bytesRead);

        bos.close();
        sock.close();
  }

这是创建文件,但只复制了一些图像内容。 有人可以解释这段代码有什么问题以及如何修复它?

2 个答案:

答案 0 :(得分:0)

您只能从InputStream读取1024个字节。你需要通过while循环包装阅读:

int bytesRead ;
while ((bytesRead = is.read(mybytearray)) != -1) {
      bos.write(mybytearray, 0, bytesRead);
}

答案 1 :(得分:0)

试试这个。

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.Socket;

import org.apache.commons.io.IOUtils;

    public class Test
    {
        public static void main(String[] argv) throws Exception {
            Socket sock = new Socket("127.0.0.1", 12345);
            InputStream is = sock.getInputStream();
            FileOutputStream fos = new FileOutputStream("E://cy.jpg");
            IOUtils.copy(is, fos);
            IOUtils.closeQuietly(fos);
            sock.close();

        }
    }

此代码使用IOUtils

中的Commons IO