2012-02-12 34 views
5

Làm thế nào để tôi thực hiện một chức năng trong java nio nói nextLineNio() đọc dòng tiếp theo từ FileChannel tăng dần như tập tin có thể là rất lớn, ý tưởng ban đầu của tôi là để đọc vào một ByteBuffer kích thước lớn hơn chiều dài tối đa của một dòng có thể tồn tại và đọc() từ FileChannel nếu được yêu cầu, nhưng vấn đề mà tôi thấy là làm thế nào để tôi un-đọc chuỗi cuối cùng của byte mà không kết thúc trong một dòng mới. Ngoài ra làm thế nào để tôi đảm bảo rằng các nextLineNio() chức năng không thất bại như nio api là không đồng bộ. Bất kỳ trợ giúp hoặc triển khai hiện có nào?java nio đọc dòng từ một tập tin

Cảm ơn

Trả lời

2

Như @EJP chỉ ra, nó là khá khả năng là bạn sẽ nhận được nhiều hơn đủ hiệu suất sử dụng BufferedReader.readLine() Trừ khi bạn biết điều này là không phù hợp, đây là những gì tôi sẽ đề nghị bạn giữ cho mọi thứ đơn giản.

http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html


tôi sẽ nhớ bản đồ toàn bộ tập tin và tìm kiếm các dòng mới để có được một dòng tại một thời điểm. Điều này tránh cần phải lo lắng về kích thước bộ đệm hoặc nhiều lần đọc (hoặc vấn đề đọc quá nhiều)

NIO là đồng bộ theo mặc định, tệp IO chỉ đồng bộ (cho đến Java 7). Để làm cho Ổ cắm không đồng bộ, bạn phải gọi một setter đặc biệt.

+0

Tôi sẽ không làm như vậy. Tôi sẽ sử dụng một BufferedReader. Tôi sẽ không sử dụng NIO được ánh xạ cho bất cứ điều gì ngoại trừ một tệp đơn lớn sẽ được mở trong suốt thời gian của chương trình, ví dụ: một cơ sở dữ liệu tự thực hiện. – EJP

+0

@EJP, Điểm tuyệt vời. Tôi nên hỏi bạn có cần NIO ngay từ đầu không. –

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