我正在将图像文件从服务器端传输到客户端,而读取图像文件时我遇到了这个问题

时间:2012-12-27 18:41:29

标签: java android image android-emulator network-programming

我使用以下代码从socket读取图像文件。它从服务器读取所有字节,因为服务器和android机器上的文件大小相同。当我打开此文件时,它不会打开文件并生成错误,即文件已损坏或太大。

                public Bitmap fileReceived(InputStream is)
        throws FileNotFoundException, IOException {

        Bitmap bitmap = null;  
        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = "a.png";
        String imageInSD = baseDir + File.separator + fileName;
            System.out.println(imageInSD);
        if (is!= null) {
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            try {

                fos = new FileOutputStream(imageInSD);
                bos = new BufferedOutputStream(fos);
                byte[] aByte = new byte[1024];
                int bytesRead;

                while ( true  ) {  
                    bytesRead = is.read(aByte);

                    bos.write(aByte, 0, bytesRead);
                if ( is.available()==0)
                    break;
                }  

                bos.flush();
                bos.close();
          //      is.reset();

        // here it give error i.e --- SkImageDecoder::Factory returned null
               bitmap = BitmapFactory.decodeFile(imageInSD);



            } catch (IOException ex) {
                // Do exception handling
                Log.i("IMSERVICE", "exception ");
            }
        }

        return bitmap;
    }

1 个答案:

答案 0 :(得分:0)

请勿使用available(),否则无法正常使用!

文档声明:

  

[available()]返回可以读取的字节数的估计 [...]使用此方法的返回值来分配一个缓冲区是不正确的保留此流中的所有数据。

这样做:

while ( (bytesRead = is.read(aByte)) > 0 ) {
    bos.write(aByte, 0, bytesRead);
}