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