2

ページに .swf ファイルを読み込もうとしています。src を提供するのではなく、Base64 に変換することで読み込みを高速化したいと考えています。これは、以下のコードを使用して画像形式でうまく機能しています

Java コード

BufferedImage buffImg = ImageIO.read(new File(imagePath));
ImageIO.write(buffImg, imgExtension, bos);
byte[] imageBytes = bos.toByteArray();                  
BASE64Encoder encoder = new BASE64Encoder();    
imageString = encoder.encode(imageBytes);

しかし、これはswfファイルでは機能しません。これを達成する方法はありますか?

HTML

<object width="10" height="10" data="data:application/x-shockwave-flash;base64, RldTCSEAAABIAZAAZAAADAEARBEIAAAAQwIAAP9AAAAA"></object>

前もって感謝します。

4

1 に答える 1

1

base64 でファイルを取得しようとしても、ファイル転送は高速化されません。バイト単位で保存されているファイル (つまり base256) が base64 (64 の印刷可能文字) に変換されるため、逆です。転送するデータの最終的な量はより多くなります。

唯一の「勝利」は、ブラウザーが swf ファイルを別の呼び出しを行う代わりに、ページの一部としてそれをロードできる可能性があることです。これは、http 1.1 では問題にならないはずです。

他にこれを行う正当な理由がない限り、この種のプラクティスはお勧めしません。

データベースにswfファイルをブロブとして持っている場合、適切なコンテンツタイプを設定するサーブレットを作成し、タグなしでServletOutputStreamでファイル全体を書き込むことができます。HTML コードでは、固定ファイルではなくサーブレットを参照する必要があります。

それでもファイルを base64 に変換したい場合は、画像 API を使用するのではなく、バイナリ ファイルの標準的な方法でファイルを取得する必要があります。

http://www.javapractices.com/topic/TopicAction.do?Id=245

バイト配列を取得したら、エンコードを行うことができます。

File file = new File(imagePath);
log("File size: " + file.length());
byte[] result = null;
try {
  InputStream input =  new BufferedInputStream(new FileInputStream(file));
  result = readAndClose(input);
}
catch (FileNotFoundException ex){
  log(ex);
}
BASE64Encoder encoder = new BASE64Encoder();    
imageString = encoder.encode(result);

そして readAndClose メソッド:

byte[] readAndClose(InputStream aInput){
  byte[] bucket = new byte[32*1024]; 
  ByteArrayOutputStream result = null; 
  try  {
    try {
      result = new ByteArrayOutputStream(bucket.length);
      int bytesRead = 0;
      while(bytesRead != -1){
        bytesRead = aInput.read(bucket);
        if(bytesRead > 0){
          result.write(bucket, 0, bytesRead);
        }
      }
    }
    finally {
      aInput.close();
    }
  }
  catch (IOException ex){
    log(ex);
  }
  return result.toByteArray();
}

おそらく、コードを特定の状況に合わせて微調整し、最適化し、エラー処理を改善する必要があります...

于 2013-07-16T07:59:01.280 に答える