webservice中有一个方法getImgToBytes(String path),调用这个方法传入网络上的图片的地址后将其转化成byte[]并返回,我测试的时候,将返回的byte[]转化成图片保存在本地磁盘中,可是图片总是显示不全,只显示了上面的一点点,其他部分都是灰色。WebService中的方法如下://将图片转化成byte[],并返回
//传入图片的网络地址
public byte[] getImageToBytes(String imgPath) {

byte[] bytes = null;
try {
//创建URL
URL url = new URL(imgPath);
//得到连接
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
//得到连接地址的输入流
InputStream in = urlConn.getInputStream();
int size;

if(in != null){
         size = in.available();//输入流的大小
bytes = new byte[size];//创建byte[]指定大小
in.read(bytes); //将输入流读到byte[]中
} in.close();//关闭输入流
urlConn.disconnect();//断开连接

} catch (Exception e) {
e.printStackTrace();
}
return bytes;
}
测试客户端代码如下:public static void main(String[] args) throws Exception {

MobileService service = new MobileServiceLocator();
MobileServiceHttpBindingStub stub = (MobileServiceHttpBindingStub)service.getMobileServiceHttpPort();
         byte[] b = stub.getImageToBytes("http://jswl.legu168.com/eis/forum/upfile/2007/6/11814740160931803044712.jpg");
UUID uuid = UUID.randomUUID();
OutputStream out = new FileOutputStream(new File("D:\\"+uuid.toString()+".jpg"));
int size;
out.write(b);
out.flush();
System.out.println("download success");
out.close();}
知道的朋友帮忙解决下,小弟感激不尽!!!急!!!

解决方案 »

  1.   

    这样可能会读入不全。
    虽然你拿到了正确的size,但是下面的read(bytes)却不能确保一次性读干净,所以需要循环读,直到read方法返回的结果是-1为止。(read方法返回本次读出了多少字节)
      

  2.   

    size = in.available();//输入流的大小
    available方法不一定能正确返回有效字节的,所以你应该调用read方法,当返回-1的时候就是没有数据了
               bytes = new byte[1024];
              ByteArrayOutputStream bao = new ByteArrayOutputStream();
               if(in != null){
              //size = in.available();//输入流的大小
                //bytes = new byte[size];//创建byte[]指定大小
                //in.read(bytes);    //将输入流读到byte[]中
                int n;
               while ((n=in.read(bytes)) != -1) {
                   bao.write(bytes, 0, n); //把独到的信息保存在缓存中
               }
            }
           ...       return bao.toByteArray(); //返回缓存的信息的字节数组
      

  3.   


    //给你改了一下子,可以试试
    public static byte[] getImageToBytes(String imgPath) {   
        byte[] bytes = null;
        try {
            //创建URL
            URL url = new URL(imgPath);
            //得到连接
            HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
            int total_size = urlConn.getContentLength();
            int remaining = total_size;
            bytes = new byte[remaining];
            //得到连接地址的输入流
            InputStream in = urlConn.getInputStream();
            byte[] buff = new byte[100];
            int readed = 0;
            while(remaining > 0){
             readed = in.read(buff);
             System.arraycopy(buff, 0, bytes, total_size-remaining, readed);
             remaining = remaining-readed;
            }
            in.close();//关闭输入流
            urlConn.disconnect();//断开连接      
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bytes;
    }
      

  4.   

    很巧啊,我也碰到了这个问题,幸好有万能的csdn帮我解决了这个问题。
    凭良心说啊:一楼一句话就说到点子上了,应该给最多的分啊。