banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ?  XML
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 19/08/2011 06:28:42 (+0700) | #1 | 245286
hungsao
Member

[Minus]    0    [Plus]
Joined: 18/08/2011 05:38:26
Messages: 4
Offline
[Profile] [PM]
Em trích dẫn đoạn này :
tóm tắt thì thế này, bạn không thể thêm object vào file bằng cách append thông thường.
Trong 1 lần mở file và ghi một vài object vào đó, ObjectOutputStream sẽ ghi một header trước, sau đó là data của các object. Khi bạn mở file lại và append thêm các object vào, sẽ có thêm 1 header nữa ghi tiếp vào file. ObjetInputStream khi đọc đến header thứ 2 này sẽ bị lỗi (dữ liệu là header chứ không phải là object cần đọc).
Cách khắc phục là khi bạn cần append thêm dữ liệu, hãy đọc hết dữ liệu ra ngoài, thêm vào các object mới rồi overwrite lại data file với dữ liệu đã cập nhật. 

nguồn : /hvaonline/posts/list/26745.html

Đến hôm nay em cũng gặp phải vấn đề này. Khi em xuất lần thứ nhất rồi đọc file thì không sao, nhưng cứ đến lần thứ 2 thì đọc file là có lỗi. Em cũng đã tìm hiểu các kiểu thì thấy có cách để viết tiếp file mà không viết lại header, hình như là writeObjectOverride(Object obj) , nhưng em không gọi ra được ...
Mong mọi người giúp em cách khắc phục 2 vấn đề trên ?
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 19/08/2011 17:27:53 (+0700) | #2 | 245354
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
Bạn Override cái ObjectOutputStream, để nếu đã có header rồi thì không write header nữa cũng đc, header chứa 1 short magic và 1 short version.
Mình không rõ lắm lý do tại sao bạn lại cố thử append thêm vào data file của ObjectOutputStream?
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 19/08/2011 23:41:18 (+0700) | #3 | 245386
hungsao
Member

[Minus]    0    [Plus]
Joined: 18/08/2011 05:38:26
Messages: 4
Offline
[Profile] [PM]
Anh secmask xem cho em cái Project này nhé smilie
link : http://www.mediafire.com/?bc1ctfbrc5t6ncu

Ý em là em muốn sau khi ghi 1 lần vào file rồi, sau đó em lại mở file ra ghi tiếp (2 lần này là cách nhau) . Theo như anh nói thì em biết lỗi là do sau khi đọc Object lần thứ 1 , đến Object thứ 2 trong file thì lỗi là do lại ghi tiếp 1 header, nay em muốn anh chỉ cho em cách ghi lần thứ 2 thì không write header nữa ! Anh sửa luôn cho em trong Project nhé, mong anh có thể comment thêm cho em dễ hiểu
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 20/08/2011 00:09:35 (+0700) | #4 | 245388
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

hungsao wrote:
Anh secmask xem cho em cái Project này nhé smilie
link : http://www.mediafire.com/?bc1ctfbrc5t6ncu

Ý em là em muốn sau khi ghi 1 lần vào file rồi, sau đó em lại mở file ra ghi tiếp (2 lần này là cách nhau) . Theo như anh nói thì em biết lỗi là do sau khi đọc Object lần thứ 1 , đến Object thứ 2 trong file thì lỗi là do lại ghi tiếp 1 header, nay em muốn anh chỉ cho em cách ghi lần thứ 2 thì không write header nữa ! Anh sửa luôn cho em trong Project nhé, mong anh có thể comment thêm cho em dễ hiểu 


Để mình thử hỏi cái này nhé, bạn có thấy việc sử dụng ObjectXStream rắc rối khi muốn thêm dữ liệu vào file đã chứa dữ liệu sẵn không? Đây có phải là nhược điểm mà JDK nên sửa không?
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 20/08/2011 18:19:59 (+0700) | #5 | 245430
hungsao
Member

[Minus]    0    [Plus]
Joined: 18/08/2011 05:38:26
Messages: 4
Offline
[Profile] [PM]
Em không biết nữa, nhưng vì vấn đề em thấy khó khi sử dụng ObjectXStream lúc muốn thêm dữ liệu vào file , em cũng không biết là có phải lỗi của JDK hay là do em chưa biết cách sử dụng, mong anh giải đáp giùm em
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 20/08/2011 20:05:12 (+0700) | #6 | 245436
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
Có vẻ output của một số method Serialize như java-Serializable,XML,JSON đều hướng hướng tối ưu cho dump object ra để truyền đi hoặc lưu trữ hơn là để lưu-thao tác trực tiếp trên dữ liệu đó trên đĩa. Vì vậy nên bạn sẽ thấy khó khăn khi muốn thêm-xoá-sửa trên các định dạng này, hầu hết đều phải đọc hết lên, sửa rồi lại lưu xuống.

Bản thân mình cũng ít dùng Java-Serializable interface để lưu trữ dữ liệu. Nếu bạn muốn encode dữ liệu dạng binary thì Google-Protobuf hoặc Kryo... cho kết quả tốt hơn, định dạng text thì có XML,JSON. Đây đều là các định dạng lưu trữ, trao đổi dữ liệu.
Còn Code của bạn mình download không được, mediafire báo lỗi dịch vụ.
[Up] [Print Copy]
  [Programming]   Vấn đề về ObjectOutputStream trong Java khi ghi file lần 2 ? 21/08/2011 23:46:32 (+0700) | #7 | 245519
hungsao
Member

[Minus]    0    [Plus]
Joined: 18/08/2011 05:38:26
Messages: 4
Offline
[Profile] [PM]
Em cám ơn bác secmask rất nhiều, chứ bác không giải thích cho em cái vụ header kia chắc em cứ tưởng mình lỗi gì đấy, hỏi mấy ông thầy thì chỉ nhận được câu trả lời là không ghi được ... !
Thank bác rất nhiều
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|