2011-12-13 20 views
25

Tôi luôn thích đọc các bài tập mà sử dụng TIMEUNIT như vậy:Có một Java enum cho các đơn vị kích thước tương đương với java.util.concurrent.TimeUnit không?

long timePeriodInMillis = TimeUnit.MINUTES.toMillis(53); 

Qua cái gì đó như:

long timePeriodInMillis = 53 * 60 * 1000; 

Có một enum tương đương Tôi có thể sử dụng cho các đơn vị filesize? Một cái gì đó như

long maxBits = FilesizeUnit.MEGABYTES.toBits(11); 

Trả lời

9

Tôi đã thực hiện chính xác như thế này nửa năm trước đây chỉ vì niềm vui lấy cảm hứng từ TimeUnit enum.

Tôi sẽ tải nó lên GitHub vào ngày mai. Nó chứa hai enums: BitUnitByteUnit. Cả hai cũng hỗ trợ chuyển đổi giữa nhau. ByteUnit đã hỗ trợ cho Tiền tố 2 dựa trên cũng như cho 10 tiền tố dựa trên. (. Hằng số và phương pháp Enum trong ByteUnit sử dụng IEC 80.000-13 ngữ cho các tiền tố)

Cách sử dụng như sau:

System.out.println(BitUnit.KBIT.toKiB(16000)); 

System.out.println(ByteUnit.GIB.toMB(1)); 
System.out.println(ByteUnit.GIB.toMiB(1)); 
System.out.println(ByteUnit.GB.toMB(1)); 
System.out.println(ByteUnit.GB.toMiB(1)); 

... và in ra:

1953.125 

1073.741824 
1024.0 
1000.0 
953.67431640625 

Đối với chuyển đổi các phương thức giữa Bits và Bytes bạn đã quá tải các phương thức để chỉ định một kích thước từ khác với 8 bit trên mỗi byte. Hy vọng bạn có thể đợi đến ngày mai.


EDIT

Ở đây bạn là: https://github.com/fabian-barney/Utils

Đừng đổ lỗi cho tôi cho cấu trúc thư mục - Tôi vẫn chưa quen với Git được nêu ra. :)

+1

Bạn đã quản lý để git nó lên đến GitHub? –

+0

Tôi vừa tạo một tài khoản. Hãy cho tôi một giây để cài đặt và cấu hình eGit đúng cách.Đây là lần đầu tiên tôi sử dụng Git - chỉ có trải nghiệm với svn và cvs. :) –

+0

OK! Sry mất quá lâu! –

0

Không, nhưng bạn có thể chuyển đổi bản thân một cách dễ dàng với:

long maxBits = 11L * 1024 * 1024 * 8; 

hoặc

long maxBits = 11L * 1000 * 1000 * 8; 

tùy thuộc vào định nghĩa của bạn về một megabyte.

+0

Điều này sẽ làm số học số nguyên và tràn nếu trên 1 gigabyte. Tôi khuyên bạn nên tạo ít nhất một trong các hằng số đó có dấu 'L' hoặc một diễn viên. – Gray

+2

Chắc chắn, nhưng phép nhân rõ ràng là những gì tôi đang cố gắng tránh. –

+0

Điểm tốt, cố định ở trên. Không quan trọng với các hằng số này, nhưng sẽ cao hơn 255 Mb. Các loại rõ ràng giờ đây có thể ngăn chặn sự cố sau này. –

-4

Xem tài liệu Java cho giao diện ComparableTimeUnit thực hiện không có điều gì như vậy. Xem tại đây: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

Tuy nhiên, với liên kết đó, bạn không khó có thể lấy được phiên bản làm việc của riêng bạn để sử dụng trong (các) dự án của bạn.

+0

Cách 'So sánh' có liên quan đến câu hỏi như thế nào? –

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