試圖在base64中獲取文件不會加速文件傳輸,它只是相反,因爲它會將以字節存儲的文件(base256,如果可以這樣說)轉換爲base64(64個可打印字符),因此您將要傳輸的最終數據量更多。
唯一的「勝利」是你可能能夠加載它作爲頁面的一部分,而不是瀏覽器再次調用swf文件,這在http 1.1上應該沒有問題。
除非你有其他充分的理由這樣做,否則我不會建議這種做法。
如果你的數據庫中的swf文件是blob,你可以創建一個servlet來設置正確的contenttype,並用ServletOutputStream寫入整個文件,而不用任何標籤。在你的html代碼中,你必須引用servlet而不是固定文件。
如果你仍然要將文件爲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();
}
這應該做的伎倆,也許一些細微的調絃的代碼適應你的具體情況,對其進行優化和更好的錯誤處理...
這只是13個字節的數據...不太可能是一個完整的SWF文件。你爲什麼在這裏使用ImageIO? ImageIO實際上處理swf文件嗎? –
@ Jon Skeet - 我用它進行圖像轉換,我正在爲swf尋找類似的東西。 – Samy
@JonSkeet:這是一個非常小但非常有效的SWF文件。 – duskwuff