2010-06-17 40 views
7

Tại sao công khai InputStream getResourceAsStream (Tên chuỗi) nằm trong lớp Class? Nó chỉ cung cấp cho inputstream của tập tin đó là trong tập tin jar và không có mối quan hệ với lớp Class. vì vậy nó có thể là phương pháp tĩnh và nó có thể ở trong bất kỳ lớp nào.Tại sao phương thức getResourceAsStream nằm trong lớp Class?

Trả lời

9

một mối quan hệ với các lớp:

  • Các gói phần mềm của lớp được đưa vào tài khoản - nếu bạn cho cuộc gọi getResourceAsStream("baz.txt") trên lớp cho foo.bar.SomeClass nó sẽ tìm kiếm /foo/bar/baz.txt
  • Các classloader được đưa vào tài khoản để tìm các tài nguyên ở nơi đầu tiên - nếu nó là một phương pháp tĩnh, làm thế nào nó có thể biết được các tệp jar (v.v) để xem xét? Có nhiều với cuộc sống hơn so với hệ thống classloader
1

Nó chỉ cung cấp cho inputstream của tệp nằm trong file jar ...

không đúng. Không phải tất cả các trình nạp lớp tải tài nguyên từ tệp JAR thông thường.

  • Một số trình nạp lớp tải từ thư mục.
  • Một số trình nạp lớp tải từ mạng.
  • Một số trình nạp lớp tải từ nhiều nguồn.

Tất cả sự phức tạp này bị ẩn khỏi bạn khi bạn sử dụng API ClassLoader qua Class trong trường hợp này.

... và không có mối quan hệ với lớp học.

Không chính xác. Xem câu trả lời của @Jon Skeet. Lưu ý rằng việc gọi Class.getResourceAsStream(String) cung cấp một tài nguyên thuộc về cùng một ngữ cảnh bảo mật như lớp. Điều này có thể rất quan trọng nếu có nhiều trình nạp lớp/bối cảnh bảo mật được sử dụng.

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