我正在將文件讀取到塊中的字節數組中,並通過POST請求將其發送到網絡服務器。這並不複雜,我在使用完全相同的代碼之前完成了它。這一次,我注意到當我的圖像到達服務器時看起來很奇怪,所以我決定查看正在發送的字節數組和正在接收的字節數組,以確保它們是相同的。不是。在java發送端,字節數組包含負數。在C#接收方,沒有負數。Java字節數組包含負數
在接收側的前15個字節(C#)
137
80
78
71
13
10
26
10
0
0
0
13
73
72
68
那些相同字節,但在發送側(JAVA)
-119
80
78
71
13
10
26
10
0
0
0
13
73
72
68
所有非負數的是相同的,-119不是唯一的負數,他們都結束了。我確實注意到-119和137相距256,並想知道這是否與它有關。
我使用讀取圖像的代碼(JAVA)
public static byte[] readPart(String fileName, long offset, int length) throws FileNotFoundException, Exception
{
byte[] data = new byte[length];
File file = new File(fileName);
InputStream is = new FileInputStream(file);
is.skip(offset);
is.read(data,0,data.length);
is.close();
return data;
}
我用寫數據的代碼(C#)
private void writeFile(string fileName, Stream contents)
{
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
int bufferLen = 65000;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = contents.Read(buffer, 0, bufferLen)) > 0)
{
fs.Write(buffer, 0, count);
}
fs.Close();
}
contents.Close();
}
我不知道這是總是發生的事情,我從來沒有注意到它,或者如果它決定發生可怕的錯誤。我所知道的是,此代碼之前的工作非常類似,並且現在不工作。
如果有人有任何建議或解釋我會很感激。
編輯: 我的圖像看起來很奇怪的原因是我如何調用readPart方法。
byte[] data = FileUtilities.readPart(fileName,counter,maxFileSize);//counter is the current chunk number
如何,我會一直稱這是
byte[] data = FileUtilities.readPart(fileName,counter*maxFileSize,maxFileSize);//the current chunk * cuhnksize for the offset...
謝謝大家,我現在顯著少困惑:)
剛剛嘗試使用數據[i] =(byte)Math.abs((int)data [i])發送所有字節之前,這不起作用,它告訴我圖像在那時已經腐敗了。 – nick 2012-03-07 21:35:28
它只是整個文件的第一個字節,還是每個塊的第一個字節? – 2012-03-07 21:37:37
Java的'byte'是有符號的,所以不可能有137個字節存儲在'byte'中。也許你的問題來自這個? – Laf 2012-03-07 21:37:45