2011-10-27 24 views
5

Tôi đang sử dụng thư viện Java sở hữu để lưu dữ liệu trực tiếp vào java.io.File, nhưng tôi cần có thể đọc dữ liệu để dữ liệu được phát trực tiếp. Dữ liệu là nhị phân, một số tệp phương tiện.Đọc dữ liệu từ Tệp trong khi đang được ghi vào

java.io.File được chuyển làm đối số cho thư viện này, nhưng tôi không biết cách nào để thoát ra khỏi nó. Có một số cách đơn giản để làm điều này, ngoại trừ mở tập tin cũng để đọc và cố gắng để đồng bộ đọc/ghi hoạt động !?

Chắc chắn tôi muốn bỏ qua phần ghi vào phần hệ thống tệp vì tôi đang sử dụng phần này từ một applet và trong trường hợp này cần thêm quyền.

+1

Nếu bạn có thể chuyển nó thành OutputStream thay thế, điều đó sẽ dễ dàng hơn. Đó có phải là một lựa chọn không? – laher

Trả lời

4

Nếu một phần của chương trình của bạn đang ghi vào một tệp, thì bạn sẽ có thể đọc từ tệp đó bằng cách sử dụng luồng thông thường new FileInputStream(someFile) trong luồng khác mặc dù điều này phụ thuộc vào sự hỗ trợ của hệ điều hành đối với một hành động như vậy. Bạn không cần phải đồng bộ hóa bất cứ điều gì. Bây giờ, bạn đang ở lòng thương xót của dòng đầu ra và tần suất phần viết của chương trình của bạn gọi là flush() để có thể có sự chậm trễ.

Đây là một số little test program mà tôi đã viết chứng minh rằng nó hoạt động tốt. Phần đọc chỉ nằm trong vòng lặp trông giống như sau:

FileInputStream input = new FileInputStream(file); 
while (!Thread.currentThread().isInterrupted()) { 
    byte[] bytes = new byte[1024]; 
    int readN = input.read(bytes); 
    if (readN > 0) { 
     byte[] sub = ArrayUtils.subarray(bytes, 0, readN); 
     System.out.print("Read: " + Arrays.toString(sub) + "\n"); 
    } 
    Thread.sleep(100); 
} 
+0

cảm ơn, nó thực sự là dễ dàng – user1015922

+2

Phụ thuộc vào hệ điều hành. Một số sẽ không cho phép bạn ghi vào một tệp đang được đọc ... những người khác có tất cả các loại sự cố hoặc yêu cầu chế độ "chia sẻ" đặc biệt để làm như vậy. Windows đặc biệt dường như ghét nó. – cHao

+0

Vì vậy, trong Windows, trong cùng một ứng dụng bạn không thể đọc các tệp của riêng bạn mà không có một số chế độ "chia sẻ"? Không biết rằng. – Gray

0

hành vi viết tệp giả định là nội tại đối với thư viện, bạn nên kiểm tra tài liệu của thư viện để xem liệu bạn có thể tránh ghi vào hệ thống tệp hay không. Nói chung, nếu bạn muốn đọc một tệp đang được ghi vào (tức là hành vi giống như đuôi nix), bạn có thể sử dụng java.io.RandomAccessFile

+0

có đôi kiểm tra tài liệu – user1015922

+0

Tôi sẽ xem xét trong RandomAccessFile, 10x – user1015922

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