2014-09-12 19 views
10

Tôi đã làm rất nhiều với IO trong Java và sau khi tìm kiếm mã để chuyển đổi nguyên thủy thành mảng byte và ngược lại tôi tìm thấy nguồn cho java.io.Bits trên một trong các mã nguồn Java lưu trữ trang web. Sau một nháy mắt, tôi nhận ra đó là chính xác những gì tôi cần, ngoại trừ nó là gói riêng tư. Vì vậy, tôi đã tạo một bản sao mà tôi công khai, được lưu trữ trong gói dự án của tôi và được sử dụng (chỉ trong các dự án cá nhân, tôi đảm bảo với bạn). Tôi thấy nó rất hữu ích.Tại sao không phải là java.io.Bits công khai?

Câu hỏi của tôi là, tại sao gói này là riêng tư? Tôi có thể thấy nó thực sự hữu ích cho những người làm việc với IO và tôi thấy không có bất lợi từ việc thay đổi khả năng hiển thị của nó thành công khai (trong rt.jar). Hoặc là có lẽ một tương đương (và xin vui lòng không đề cập đến các thư viện khác)?

Dưới đây là một liên kết đến một trang web được chọn ngẫu nhiên có nguồn Java cho java.io.Bits: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/Bits.java

Trả lời

8

Bạn sẽ phải tự hỏi một trong những nhà phát triển Java cho chắc chắn, nhưng bằng cách làm cho nó gói tin, API có thể được điều trị là "nội bộ" - tức là nó có thể thay đổi hoặc biến mất bất cứ lúc nào. Điều này có nghĩa là API có thể được phát triển tương đối nhanh và không cần phải trải qua quá trình thử nghiệm tương đối triệt để mà API công khai cần phải trải qua (kể từ khi chúng được phát hành, chúng bị kẹt ở đó vì lợi ích.)

Tóm lại, việc đưa ra một API công khai có ý nghĩa lâu dài, và nó đòi hỏi nhiều công việc hơn nhiều so với việc chỉ cần nhấn một công tắc.

Tôi sẽ nguy hiểm khi đoán nó bắt đầu cuộc sống như một nhóm chức năng "bị tấn công cùng nhau" hữu ích cho một vài lớp khác trong gói IO và đã ở đó từ đó.

+0

Bạn có nghĩ rằng chỉ cần tạo một bản sao cá nhân và phân phối nó với một ứng dụng? – Nulano

+4

@Nulano - tôi khá chắc chắn là không. mặc dù tôi đoán điều đó phụ thuộc vào giấy phép của ứng dụng của bạn. jdk hiện đại là GPL tôi tin, vì vậy nếu ứng dụng của bạn là GPL, thì có thể không sao. – jtahlborn

+0

Nhìn vào whats trong mã, tôi muốn nói mã tầm thường của nó; yêu cầu cho các phương pháp như vậy bất kỳ lập trình có thẩm quyền sẽ đưa ra một rất rất giống nhau (nếu không giống hệt nhau) thực hiện. Trong khi không phải là một biện minh hợp lý; Tôi đoán mã không đủ gốc để đảm bảo mọi khiếu nại vi phạm bản quyền. – Durandal

3

Đây là gói riêng tư, nhưng có các API công khai hiển thị cùng một hành vi, ví dụ: ByteBuffer.wrap(array).getInt(index) và các phương pháp khác trên ByteBuffer. Bạn gần như chắc chắn sẽ sử dụng API công khai được thiết kế hợp lý và tốt hơn là cố gắng bọc hoặc sao chép chi tiết triển khai nội bộ từ Java.

+0

Tôi nghĩ đây là câu trả lời đáng được chấp nhận, nhưng vì tôi có thể "chấp nhận "chỉ một câu trả lời duy nhất, bạn chỉ nhận được +1. – Nulano

+0

Tôi không chắc chắn về hiệu suất của ByteBuffer so với java.io.Bits để chạy một bài kiểm tra nhanh. Kết quả cho thấy rằng để lưu trữ java.io.Bits là nhanh nhất với BB tuyệt đối ngay sau đó, và để đọc BB tuyệt đối là nhanh nhất với tương đối lớn endian và sau đó ít endian sau, Bits chậm nhất. Đây là một liên kết pastebin đến kết quả chi tiết và mã src cho bài kiểm tra của tôi: http://pastebin.com/XStkmN8s – Nulano

+0

Cập nhật: Tôi cập nhật pastebin để thêm các bài kiểm tra trên máy tính Ubuntu của mình. Chúng có nhiều lợi ích cho java.io.Bits, nhưng ByteBuffer tuyệt đối tuyệt đối cuối cùng là gần phía sau. – Nulano

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