尝试以 base64 格式获取文件不会加快文件传输速度,反之亦然,因为它将以字节存储的文件(如果可以这样说是 base256)转换为 base64(64 个可打印字符),所以您将要传输的最终数据量更多。
唯一的“胜利”是您可以将其作为页面的一部分加载,而不是让浏览器再次调用 swf 文件,这在 http 1.1 上应该没有问题。
除非您有其他充分的理由这样做,否则我不会建议这种做法。
如果您将 swf 文件作为 blob 保存在数据库中,您可以只创建一个设置正确内容类型的 servlet,并使用 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();
}
这应该可以解决问题,也许可以进行一些微调以使代码适应您的具体情况,优化它并更好地处理错误......