Tôi đang đọc một tệp thành một mảng byte theo khối và gửi nó qua mạng qua yêu cầu POST tới máy chủ web. Nó không phải là bất cứ điều gì phức tạp, tôi đã thực hiện nó trước khi sử dụng mã chính xác này. Lần này, tôi nhận thấy rằng hình ảnh của tôi trông thật kỳ quặc khi họ đến máy chủ, vì vậy tôi quyết định xem mảng byte đang được gửi và mảng được nhận chỉ để đảm bảo nó giống nhau. Nó không phải. Về phía gửi java, mảng byte chứa số âm. Trên mặt nhận C#, không có số âm.Mảng byte Java chứa số âm
15 byte đầu tiên ở phía bên nhận (C#)
137
80
78
71
13
10
26
10
0
0
0
13
73
72
68
Những byte tương tự nhưng ở phía bên gửi (java)
-119
80
78
71
13
10
26
10
0
0
0
13
73
72
68
Tất cả các số không âm đều giống nhau và -119 không phải là số âm duy nhất, tất cả đều kết thúc. Tôi đã nhận thấy rằng -119 và 137 là 256 ngoài và tự hỏi nếu điều đó có cái gì để làm với nó.
Mã Tôi đang sử dụng để đọc các hình ảnh (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;
}
Mã Tôi đang sử dụng để ghi dữ liệu (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();
}
Tôi không biết nếu đó là điều gì đó luôn luôn xảy ra và tôi chưa bao giờ để ý đến nó trước đây hoặc nếu đó là điều gì đó quyết định sai lầm khủng khiếp. Những gì tôi biết là mã này đã làm việc trước đây cho một cái gì đó rất giống nhau và nó không hoạt động ngay bây giờ.
Nếu có ai có bất kỳ đề xuất hoặc giải thích nào, tôi thực sự sẽ đánh giá cao nó.
CHỈNH SỬA: Lý do hình ảnh của tôi trông kỳ lạ là cách tôi gọi phương thức readPart.
byte[] data = FileUtilities.readPart(fileName,counter,maxFileSize);//counter is the current chunk number
Làm thế nào tôi nên đã gọi đó là
byte[] data = FileUtilities.readPart(fileName,counter*maxFileSize,maxFileSize);//the current chunk * cuhnksize for the offset...
Cảm ơn tất cả mọi người, tôi là đáng kể ít bối rối bây giờ :)
Chỉ cố gắng tạo tất cả các byte tích cực trước khi chúng được gửi bằng dữ liệu [i] = (byte) Math.abs ((int) dữ liệu [i]); Điều đó không hiệu quả, nó cho tôi biết hình ảnh bị hỏng tại điểm đó. – nick
Chỉ là byte đầu tiên của toàn bộ tệp, hoặc byte đầu tiên của mỗi đoạn? –
'byte' của Java được ký, vì vậy không thể có 137 được lưu trữ trong một' byte'. Có lẽ vấn đề của bạn đến từ điều này? – Laf