Hỏi cách ghi dữ liệu xuống dòng khi dùng lớp ObjectOutputStream

Mình đang thử viết ghi file theo ObjectOutputStream vấn đề là khi mở file data.txt ra thì dử liệu ghi thành 1 hàng ngang bao gồm cả object nhìn thật rối .Xin hỏi có cách nào ghi từng object xuống dòng .

Giả sử ta có code như sau

public class ObjectOutputStreamExample {
     public static void main(String[] args)  throws IOException {
         ObjectOutputStream oos =  null ;
         try {
             oos =  new ObjectOutputStream( new FileOutputStream( "D:\\testout.txt" ));
             // create student
             Student student =  new Student( 1 ,  "Tran Hao Phong" ,  "Ha Noi" ,  17 );
             // write student
             oos.writeObject(student);
             System.out.println( "Success..." );
         }  catch (IOException ex) {
             ex.printStackTrace();
         }  finally {
             oos.close();
         }
     }
}

Muốn xuống dòng thì mở tập tin đó lên, sau đó nhấn Enter tại vị trí bạn muốn rồi lưu lại.
Sau đó xóa tập tin đó đi, vì cấu trúc dữ liệu bị thay đổi nên tập tin đó không còn dùng được (khi mở bằng ObjectInputStream).

Nó là dữ liệu nhị phân của đối tượng mà bạn, đâu phải dạng văn bản đâu mà thích xuống dòng thì xuống!!!

Nếu bạn muốn dữ liệu dạng văn bản để dễ nhìn thì tự lưu những trường giá trị từ đối tượng ra dạng văn bản, đừng dùng ObjectOutputStream.

3 Likes

ồ thì ra là mặc định .Mình tưởng có thể thay đổi như dùng PrintWriter hay BufferedOutputStream thank .Vậy nếu muốn mã hoá object đó để người ta không đọc đc thì làm sao ? vì mình thấy dùng 2 cái kia nhập cái gì nó ghi vo file y chang !!!:hot_face:

1 Like

Vậy thì bạn phải lưu text xuống chứ không phải lưu cả cái Object đó xuống

2 Likes

Muốn mã hóa thì bạn dùng các phương pháp mã hóa có sẵn hoặc tự nghĩ ra.

2 Likes

Về việc vì sao dùng object output stream lại ra kết quả không dễ để đọc cho người thì các bạn khác đều đã nói rồi. Còn ý muốn mã hoá dữ liệu khi đọc và ghi thì bạn có thể dùng 2 class của java là CipherInputStream và CipherOutputStream wrap output và input trước khi đưa vào Object output stream là OK

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?