我有一个使用 BufferedOutputStream 加载音频文件的 servlet,如下所示:
BufferedInputStream in= new BufferedInputStream( new FileInputStream( file), DEFAULT_BUFFER_SIZE );
BufferedOutputStream out= new BufferedOutputStream( response.getOutputStream(), DEFAULT_BUFFER_SIZE );
byte[] buffer= new byte[DEFAULT_BUFFER_SIZE];
int size;
while ( ( size= in.read( buffer) ) > 0 ) {
out.write( buffer, 0, size);
}
此文件用于音频 html5 标记(如果浏览器不支持,则用于 swf 播放器)。它在某些浏览器上运行良好(在 Windows 上:IE6-10、Firefox、Chrome、Safari。在智能手机上:Chrome、Firefox(测试版)、默认的 android 浏览器)。但在 2 个浏览器(iPad/iPhone 上的 Safari 和 HTC 浏览器)中,我有一个例外。当我通过我的 servlet 加载文件时,大约 15 秒后,我收到一个异常:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: APR error: -730053
在 safari 上,我只能读取一次文件,然后我必须重新加载音频 html5 标签。在 HTC 浏览器上,我无法随时阅读。
多谢。