-2

カスタムsocketクライアント サーバー データ (ファイルまたはテキスト) 送信コードがあります。バイナリ ファイルを転送すると、一部のバイトが範囲外の文字に変換されるようになりました。だから私はそれらを16進文字列で送ります。それはうまくいきます。しかし、別の問題については、これは解決策ではありません。これにはパフォーマンス上の問題もあります。

バイトを 16 進数に変換するには、Java コードの助けを借りました。

ネットから画像をダウンロードすると、同じことが起こります。一部のバイトは別のものに変わります。バイトごとに比較しました。?シンボルの代わりに String show に変換します。リーダーとバイト配列入力ストリームを試しました。私はネット上のすべての例を試しました。私がしている可能性のある間違いは何ですか?

バイトをファイルに保存するためのマイ コード:

void saveFile(String strFileName){  


 try{  
         URL url = new URL(strImageRoot + strFileName);  
         BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));  
         BufferedWriter bw = new BufferedWriter(new FileWriter(strImageDownloadPath + strFileName));  
         String line = null;  
         while ( (line = reader.readLine()) != null) {  
            bw.write(line);  
         }  
     }catch(FileNotFoundException fnfe){  
        System.out.println("FileNotFoundException occured!!!");  
     }catch(IOException ioe){  
     }catch(Exception e){  
        System.out.println("Exception occured : " + e);  
     }finally{  
        System.out.println("Image downloaded!!!");  
     }  
}   
4

3 に答える 3

1

ソケットクライアントサーバーアプリケーションを構築していたときに、同様の問題が発生しました。バイトはいくつかの奇妙な文字であり、それらを比較するためにあらゆる種類のことを試みました。次に、some1 が datainputstream、dataoutstream を使用し、バイトとの間の変換を行う必要があることを指摘した議論に出くわしました。それは私にとって完全に機能しました。私はまったくバイトに触れたことはありません。

于 2012-04-21T03:27:51.027 に答える
1

このコードを使用してください

           File root = android.os.Environment.getExternalStorageDirectory();               

           File dir = new File (root.getAbsolutePath() + "/image");
           if(dir.exists()==false) {
                dir.mkdirs();
           }

           URL url = new URL("http://4.bp.blogspot.com/-zqJs1fVcfeY/TiZM7e-pFqI/AAAAAAAABjo/aKTtTDTCgKU/s1600/Final-Fantasy-X-Night-Sky-881.jpg");
           //URL url = new URL(DownloadUrl);
           //you can write here any link
           File file = new File(dir,"Final-Fantasy-X-Night-Sky-881.jpg");



           long startTime = System.currentTimeMillis();


            //Open a connection to that URL. 
           URLConnection ucon = url.openConnection();


            //* Define InputStreams to read from the URLConnection.

           InputStream is = ucon.getInputStream();
           BufferedInputStream bis = new BufferedInputStream(is);


            //* Read bytes to the Buffer until there is nothing more to read(-1).

           ByteArrayBuffer baf = new ByteArrayBuffer(6000);
           int current = 0;
           while ((current = bis.read()) != -1) {
              baf.append((byte) current);
           }


            //Convert the Bytes read to a String. 
           FileOutputStream fos = new FileOutputStream(file);
           fos.write(baf.toByteArray());
           fos.flush();
           fos.close();
于 2012-04-21T06:15:40.707 に答える