Tôi đang sử dụng Java để viết một mảng byte vào một tệp. Khi tôi mở tập tin của tôi trong một trình soạn thảo hex tôi không phải lúc nào cũng nhìn thấy các byte mà tôi mong đợi ở đó. Đây là mã ví dụ của tôi, nội dung của tập tin đầu ra:Viết mảng byte vào tập tin. Không phải lúc nào cũng nhận được kết quả mong đợi
public static void main(String[] args)
{
File file = new File("c:\\temp\\file.txt");
file.delete();
FileOutputStream outStream = null;
try
{
file.createNewFile();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
outStream = new FileOutputStream(file);
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
outStream.write(new byte[] { 0x14, 0x00, 0x1F, 0x50 });
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Khi tôi mở tập tin trong một trình soạn thảo hex tôi nhận được 00 9e f3 04
như các nội dung thay vì các byte mà tôi gửi. Kết quả của tôi dường như không nhất quán. Đôi khi tôi nhận được kết quả mong đợi và đôi khi tôi thì không.
chí này ra các dữ liệu chính xác:
outStream.write(new byte[] { 0x14 , 0x00, 0x1F, 0x50, (byte) 0xE0, 0x4F, (byte) 0xD0, 0x20, (byte) 0xEA, 0x3A, 0x69, 0x10, (byte) 0xA2 , (byte) 0xD8, 0x08, 0x00, 0x2B });
nội dung tập tin bao gồm:
14 00 1f 50 e0 4f d0 20 ea 3a 69 10 a2 d8 08 00 2b
Nếu tôi thêm một byte hơn cho mảng mà sau đó nó không thành công.
outStream.write(new byte[] { 0x14 , 0x00, 0x1F, 0x50, (byte) 0xE0, 0x4F, (byte) 0xD0, 0x20, (byte) 0xEA, 0x3A, 0x69, 0x10, (byte) 0xA2 , (byte) 0xD8, 0x08, 0x00, 0x2B, 0x30 });
nội dung tập tin tại là:
14 e5 80 9f e4 bf a0 e2 83 90 e3 ab aa e1 81 a9 ed a2 a2 08 e3 80 ab
Tôi cũng đã gặp rắc rối với cái này:
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00 });
nội dung tập tin bao gồm:
4c 00
Hai byte cuối cùng không được viết.
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00, 0x01 });
này sẽ tạo ra kết quả mong đợi. Nội dung tệp là:
4c 00 00 00 01
Tôi cảm thấy mình thiếu một số thông tin cơ bản về cách dữ liệu được ghi vào tệp. Làm thế nào có thể nhận được kết quả phù hợp khi viết mảng byte vào một tập tin?
Mặc dù tôi không tin rằng nó sẽ tạo sự khác biệt ở đây, hãy thử '.flush()' rồi '.đóng()' sau khi bạn '.write()' ... – fge
Đó là * rất * lạ. Và đó là mã chính xác bạn thực hiện? Không có 'Writer' ở đâu? Hoặc 'Chuỗi' giá trị? Ngoài ra: lệnh gọi 'createNewFile()' không cần thiết. –