-1
好吧,所以我試圖用套接字發送文件。這是我在服務器端得到的代碼。問題是,如果我讓這段代碼運行,我會得到一些奇怪的輸出喜歡丟失的字節。我試圖在if語句中添加thread.sleep(),這似乎有助於解決某些問題,並且只會在處理較大的文件時出現問題。我也嘗試在行緩衝區中放置一個斷點= setbuffersize(binaryData,i,in);所以我在每個文件後停止。這似乎有助於解決問題。所以我想問題是即使沒有什麼可讀的代碼也會繼續讀取(客戶端已經有時間發送它)。我不確定如何解決這個問題。我試圖檢查BUFFER_SIZE是否與in.available()一樣大,但似乎在一段時間後停止發送並且從未到達BUFFER_SIZE。在inputstream中獲取損壞的數據.read
那麼如何讓代碼等待數據傳輸,然後再嘗試讀取呢?
while (byteRead != -1) {
commandlengh = msg.length();
binaryData = new byte[Integer.parseInt(ParameterValues.get(ParameterValues.size() - 1))];
in.read();
byte[] buffer = setbuffersize(binaryData, i, in);
while (in.read(buffer) != -1) {
for (int j = 0; j < buffer.length; j++) {
binaryData[i] = buffer[j];
i++;
}
buffer = setbuffersize(binaryData, i, in);
if(buffer.length == 0)
{
Parameters.clear();
ParameterValues.clear();
i = 0;
commandlengh = 0;
break;
}
}
byteRead = in.read();
}
private byte[] setbuffersize(byte[] binaryData, int i, InputStream in) throws IOException
{
int BUFFER_SIZE = 65536;
if(binaryData.length - i < BUFFER_SIZE)
{
BUFFER_SIZE = binaryData.length - i;
}
else
{
BUFFER_SIZE = 65536;
}
byte[] buffer = new byte[BUFFER_SIZE];
return buffer;
}