Vì vậy, tôi đang cố gắng viết thư từ người dùng trên mạng nhắn tin đến một tệp. Tôi đang cố gắng để xây dựng chương trình này với thực hành java tốt và kỹ thuật IO tập tin thích hợp.Có nên lưu trữ nhiều văn bản được lưu trữ định kỳ vào bộ đệm trước khi lưu vào một tệp không?
Hiện tại, chương trình của tôi nhận ra ai đó đã đăng một tin nhắn, nhận tin nhắn và ghi ngay vào một tập tin. Tạo đối tượng file, tạo đối tượng writer, gắn thêm thông điệp, sau đó đóng file.Đây có vẻ như thực hành tốt nếu không có nhiều thông báo đến, nhưng nếu có một luồng hội thoại nhanh thì điều này có vẻ chậm và đòi hỏi nhiều các hành động không cần thiết vì tệp sẽ mở lại ngay lập tức.
Sau đó, tôi nghĩ rằng nếu tôi chỉ để lại tập tin mở và vừa viết các tin nhắn khi họ đến tập tin, sau đó đóng nó định kỳ. Đó là thực hành tốt? Để tệp mở trong thời gian dài? Ví dụ sau một giờ hoặc sau khi một số lượng dữ liệu đã được viết?
Bây giờ, tôi nghĩ mình nên lấy các tin nhắn, lưu trữ chúng trong một "bộ đệm" (như một mảng chuỗi), sau đó lưu mảng chuỗi vào một tệp khi "bộ đệm" đầy. Đây có phải là thực hành tốt hơn?
Vì vậy, tôi có hai câu hỏi:
1) Có thực hành tốt để lại một tập tin mở cho một khoảng thời gian dài (vài phút đến vài giờ) nếu bạn không sử dụng các tập tin?
2) Thực hành tốt cho "Cache" như tôi đang nói đến là gì? Là một mảng chuỗi tốt? Có cái gì tốt hơn tôi nên sử dụng? Bạn sẽ lưu trữ thông tin này như thế nào?
> thực hành tốt nhất cho nhật ký (và tương tự) trong các ứng dụng máy chủ là để quyết định thời gian trễ có thể chấp nhận được và bám vào nó. Bạn có thể giải thích cách thực hiện điều đó không? Hoặc chỉ cho tôi theo hướng để tìm ra cách để làm điều này? Ngoài ra, một số thông tin thêm về cách sử dụng BuffereOutputStream sẽ là tốt đẹp. Tôi đang cố gắng sử dụng nó đúng cách. Có những lớp học khác nên tham gia không? Làm cách nào để tìm hiểu về việc sử dụng phương thức flush(). Đây cũng là một câu trả lời tuyệt vời cảm ơn bạn. – Bnannerz
BufferedOutputStream khá dễ dàng; giống như nếu bạn có một FileOutputStream được gọi ra, chỉ cần làm mới BufferedOutputStream (ra) và sử dụng nó như bạn sẽ FileOutputStream. Có một BufferedWriter, nếu bạn đang sử dụng các nhà văn. Tham số thứ hai là mức độ lớn để tạo bộ đệm; mặc định là khá nhỏ nhưng cho đến nay tôi biết bạn có thể làm cho nó 8KB hoặc 64KB hoặc bất cứ điều gì bạn thích. – sam
Giới thiệu về cách thực hiện điều thời gian - điều này khá đơn giản nhưng liên quan đến đồng thời, vì vậy bạn cần phải sử dụng từ khóa được đồng bộ hóa ở những nơi! Về cơ bản, có chức năng 'ghi vào tệp' của bạn để nó ghi vào luồng đầu ra được lưu vào bộ đệm. Kiểm tra xem bạn đã có bộ hẹn giờ 'tuôn ra' chưa. Nếu có, không làm gì; nếu không, hãy bắt đầu một chuỗi mới chỉ ngủ trong 5 giây (hoặc bất kỳ thứ gì), sau đó gọi tuôn ra trên luồng. (Gọi flush() sẽ xóa bộ đệm và thực sự ghi nó vào đĩa.) – sam