0

我正在使用以下代码从套接字读取图像文件。它从服务器读取所有字节,因为服务器和 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;
    }
4

1 回答 1

0

不要available()用于这个,它不会可靠地工作!

文档状态:

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

这样做:

while ( (bytesRead = is.read(aByte)) > 0 ) {
    bos.write(aByte, 0, bytesRead);
}
于 2012-12-27T19:22:33.970 回答