Я читаю файл в байтовый массив порциями и отправляю его по сети через POST-запрос к веб-серверу.В этом нет ничего сложного, я сделал это прежде, чем использовать этот же код.На этот раз я заметил, что мои изображения выглядят действительно странно, когда они попадают на сервер, поэтому я решил посмотреть на отправляемый байтовый массив и полученный, чтобы убедиться, что он одинаковый.Это не.На стороне отправки Java байтовый массив содержит отрицательные числа.На принимающей стороне C # нет отрицательных чисел.
Первые 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...
Спасибо всем, теперь я значительно менее смущен:)