112

Tôi chỉ muốn chuyển đổi FileInputStreamthành một InputStream, làm thế nào tôi có thể làm điều đó?

ví dụ

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();
|
  • 3

    runjan. Bạn có thể vui lòng thay đổi câu trả lời chính xác cho bài viết này. Câu trả lời hiện tại là subpar. Nếu bạn thay đổi nó thành cái dưới đây sẽ là tối ưu.

    – Phạm Nhật Huy 23:51:36 29/10/2013
  • Nó được chỉ là một câu hỏi ngớ ngẩn .. Tôi đã không có ý tưởng đúng đắn về serialization ... bất cứ ai có thể tham khảo @sudocode

    – Lê Huy Hùng 12:45:30 19/11/2013
  • 4

    nó có thể là một câu hỏi ngớ ngẩn nhưng nhiều người vẫn đề cập đến câu hỏi này vì nó hữu ích.

    – Bùi Duy Khang 19:44:55 03/12/2013
  • 1

    @WilliMentzel Tôi đến đây để tìm kiếm sự hội tụ thực tế từ Filelớp đến InputStream. Chỉnh sửa của bạn cho thấy đó là những gì tác giả đang yêu cầu (ít nhất là một phần), và nó không đúng.

    – Lý An Di 10:30:38 09/08/2018
  • @Line Tôi chỉ thay đổi định dạng Tôi không nghĩ rằng tôi đã thay đổi ý nghĩa. Nếu bạn vẫn phản đối, vui lòng quay lại những thay đổi của tôi. Điều này sẽ được xem xét bởi cộng đồng sau đó. Nhân tiện: làm thế nào để bạn biết tác giả có ý gì ngoại trừ câu hỏi bây giờ là gì?

    – Nguyễn Ngọc Thi 13:34:31 09/08/2018
6

Đầu tiên bạn thường đọc từ luồng đầu vào và sau đó đóng nó. Bạn có thể gói FileInputStream trong một InputStream (hoặc Reader) khác. Nó sẽ tự động được đóng lại khi bạn đóng luồng / đầu đọc.

Nếu đây là một phương thức trả lại InputStream cho người gọi, thì trách nhiệm của người gọi là đóng luồng khi kết thúc với nó. Nếu bạn đóng nó trong phương thức của bạn, người gọi sẽ không thể sử dụng nó.

Để trả lời một số ý kiến ​​của bạn ...

Để gửi nội dung InputStream cho người tiêu dùng từ xa, bạn sẽ viết nội dung của InputStream vào OutputStream, sau đó đóng cả hai luồng.

Người tiêu dùng từ xa không biết gì về các đối tượng luồng bạn đã tạo. Anh ta chỉ nhận được nội dung, trong InputStream mà anh ta sẽ tạo, đọc và đóng.

|
  • 1

    Điều gì xảy ra nếu tôi muốn gửi một dòng đầu vào qua thư. .. có thể đóng ở phía bên kia không .. hoặc không cần phải đóng cửa

    – Đặng Đan Linh 12:26:22 19/06/2012
  • 1

    Bản thân đối tượng stream không được tuần tự hóa. Nội dung của luồng có thể được tuần tự hóa - bằng cách viết nội dung vào Đầu ra

    – Bùi Ðông Phương 12:27:50 19/06/2012
  • 1

    Trên thực tế, mục tiêu của tôi là gửi một tệp .. Tôi không muốn bất cứ thứ gì chạy khi tôi gửi .. ví dụ như tôi đang gửi một chuỗi .. để phía bên kia không cần phải lo lắng về việc đóng bất cứ thứ gì.

    – Hoàng Việt Thi 12:31:57 19/06/2012
  • 1

    Tập tin cũng không được tuần tự hóa. Nhưng nội dung của một tệp có thể được tuần tự hóa bằng OutputStream.

    – Hoàng Tích Ðức 12:34:46 19/06/2012
  • 1

    có thể tôi sẽ đợi một khoảng thời gian cụ thể và sau đó đóng dòng đầu vào, ví dụ tùy thuộc vào kích thước của tệp

    – Tạ Họa Mi 12:47:23 19/06/2012
131
InputStream is;

try {
    is = new FileInputStream("c://filename");

    is.close(); 
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

return is;
|
54
InputStream is = new FileInputStream("c://filename");
return is;
|
35

FileInputStream một inputStream.

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();  
return is;

Tất nhiên, điều này sẽ không làm những gì bạn muốn nó làm ; luồng bạn trả lại đã bị đóng. Chỉ cần trả lại FileInputStream và được thực hiện với nó. Mã cuộc gọi sẽ đóng nó.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.