我用下面的代码从Web服务器上的wav文件中获取数据。 getFormat()
,getFormatLength()
,totallength
和读取字节,每个执行http访问和服务器日志显示有3个访问。有没有办法让它成为一次旅行?如何避免来自java程序的多个http访问wave资源文件?
try {
audioInputStream = AudioSystem.getAudioInputStream(url);//soundFile);
format = audioInputStream.getFormat();
totallength = audioInputStream.getFrameLength()*format.getFrameSize();
waveData = new byte[(int)totallength];
int total=0;
int nBytesRead = 0;
try {
while (nBytesRead != -1 && total<totallength) {
nBytesRead = audioInputStream.read(waveData, total, (int) totallength);
if (nBytesRead>0)
total+=nBytesRead;
}
...
是所有那些fullworthy GET请求(返回整个文件中响应正文),或者是getFormat()和getFormatLength()HEAD请求(它只返回HTTP头,因此返回一个空的响应主体)中的头几个。我希望他们是“只是”头应该是非常便宜的请求。或者,服务器是由您自己维护的(例如,servlet?),它是不是完全正确地完成它的工作,并将整个文件还原到HEAD上? – BalusC
@BalusC我使用了servlt,我想我需要更新该代码。但我也在想,只是使用Joop Eggen的建议,刚开始时不知道大小就读了整个流。我意识到格式不被使用。这样可以减少往返时间。 –