Trình đọc được đọc có nghĩa là đọc một tệp tuần tự. Những gì bạn đang tìm kiếm là java.io.RandomAccessFile, và sau đó bạn có thể sử dụng seek()
để đưa bạn đến nơi bạn muốn trong tệp.
Người đọc truy cập ngẫu nhiên được thực hiện như sau:
try{
String fileName = "c:/myraffile.txt";
File file = new File(fileName);
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.readChar();
raf.seek(0);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Các "rw"
là một nhân vật chế độ đó là detailed here.
Lý do trình đọc truy cập tuần tự được thiết lập như thế này là để chúng có thể triển khai bộ đệm của chúng và mọi thứ không thể thay đổi dưới chân chúng. Ví dụ, trình đọc tệp được cung cấp cho trình đọc được đệm chỉ nên được người đọc đệm đó hoạt động. Nếu có một vị trí khác có thể ảnh hưởng đến nó, bạn có thể có hoạt động không nhất quán khi một người đọc nâng cao vị trí của nó trong trình đọc tệp trong khi người kia muốn nó vẫn như cũ bây giờ bạn sử dụng người đọc khác và nó ở một vị trí chưa được xác định.
Nguồn
2008-11-04 17:55:23
Bạn có thể giải thích không? Tôi có một tệp lớn 30MB, tôi không thể tải tất cả vào bộ nhớ. Tôi đã sắp xếp dữ liệu, và bây giờ muốn thực hiện tìm kiếm nhị phân trực tiếp trên tệp. Đối với điều này tôi cần phải tìm kiếm ngẫu nhiên. –
Ngày nay tôi giả định bạn có nghĩa là 30GB, trừ khi bạn đang sử dụng hw thực sự nhỏ (nhưng sau đó nó sẽ không có đĩa) Dù sao, tìm kiếm ngẫu nhiên trên đĩa thường hoàn toàn hủy hoại hiệu suất logarit của tìm kiếm nhị phân. Một vài lựa chọn thay thế là 1) thực hiện truy cập tuần tự (có, trên đĩa tìm kiếm tuần tự có thể nhanh hơn tìm kiếm nhị phân) hoặc 2) cách tiếp cận hỗn hợp như sử dụng B-tree http://en.wikipedia.org/wiki/ B-tree Nếu những gợi ý này không đủ, bạn có thể muốn đặt câu hỏi của mình dưới dạng một câu hỏi riêng biệt thay vì nhận xét (vui lòng đăng nhận xét ở đây có liên kết tới câu hỏi để ping tôi) – Davide