我用下面的代碼從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的建議,剛開始時不知道大小就讀了整個流。我意識到格式不被使用。這樣可以減少往返時間。 –