2011-11-23 31 views
5

Giả sử tôi có một số OutputStream (và không phải làObjectOutputStream). Có thể gửi một đối tượng được tuần tự hóa bằng cách sử dụng phương thức ghi không? Cảm ơn!Đối tượng tuần tự với đầu ra

+0

bạn có thể ghi bất kỳ dữ liệu nào bằng OutputStream. đơn giản nhất là tạo một byte [] của đối tượng của bạn – Hachi

Trả lời

18

đây là những gì bạn làm để serialize đối tượng

new ObjectOutputStream(outputStream).writeObject(obj); 

nếu bạn muốn kiểm soát các byte [] ra

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

ObjectOutputStream oos = new ObjectOutputStream(buffer); 

oos.writeObject(obj); 

oos.close(); 

byte[] rawData = buffer.toByteArray(); 

ps. thx cho các ý kiến ​​dưới đây, chỉnh sửa theo đó

+0

Bạn cũng nên thêm một số văn bản mô tả để nó không chỉ là một câu trả lời đúng mà còn là một câu trả lời đúng. –

+1

Bạn cần 'writeObject()', không phải 'write()'. Và một lời gọi đến 'flush()' sẽ hữu ích. –

0

Bạn phải sử dụng lớp ObjectOutputStream và các phương pháp của nó cho các đối tượng *serialize*. Trong thực tế, ObjectOutputStream là một phân lớp con của java.io.OutputStream (Đây là một lớp siêu trừu tượng của các luồng định hướng byte). Hãy nhìn vào một bài viết về Java Serialization API.

EDIT: Bạn có thể sử dụng XMLEncoder

(từ Doc: Lớp XMLEncoder là một lựa chọn bổ sung cho ObjectOutputStream và có thể sử dụng để tạo ra một đại diện văn bản của một JavaBean giống như cách mà ObjectOutputStream có thể được sử dụng để tạo biểu diễn nhị phân của đối tượng có thể tuần tự)

+1

có nhiều cách để tuần tự hóa một đối tượng; bạn không phải sử dụng ObjectOutputStream – Hachi

1

Bạn có thể sử dụng ObjectOutputStream để 'nắm bắt' dữ liệu đối tượng trong một mảng byte và gửi nó đến OutputStream.

String s = "test"; 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(s); 
byte[] byteArray = baos.toByteArray(); 
for (byte b : byteArray) { 
    System.out.print((char) b); 
} 

Một tùy chọn khác không chung chung là sắp xếp thứ tự đối tượng trong biểu diễn chuỗi, ví dụ: CSV

0

Đây là tầm thường: bạn chỉ có thể quấn gốc OutputStream của bạn trong một mới ObjectOutputStream, và sau đó sử dụng phương pháp chuyên ngành của ObjectOutputStream:

OutputStream myOriginalOutputStream = ...; 
ObjectOutputStream oos = new ObjectOutputStream(myOriginalOutputStream); 
oos.writeObject(new MyObject()); 
oos.flush(); 
oos.close(); 

Bên trong, ObjectOutputStream sẽ gọi write() phương pháp OutputStream tiềm ẩn 's.

Các vấn đề liên quan