2011-10-12 37 views

Trả lời

5

Jacksum: http://www.jonelo.de/java/jacksum/index.html

cksum   algorithm: POSIX 1003.2 CRC algorithm 
       length:  32 bits 
       type:  crc 
       since:  Jacksum 1.0.0 
       comment:  - under BeOS it is /bin/cksum 
          - under FreeBSD it is /usr/bin/cksum 
          - under HP-UX it is /usr/bin/cksum and 
          /usr/bin/sum -p 
          - under IBM AIX it is /usr/bin/cksum 
          - under Linux it is /usr/bin/cksum 

Đó là mã nguồn mở.

+0

Hoạt động hoàn toàn tốt cho tôi. Cảm ơn đã phản ứng nhanh chóng! – Kowshik

+0

@palacsint: Có mã/bản ngã mà tôi có thể sử dụng trong chương trình java của mình không, vì tôi không muốn bất kỳ tiện ích nào của bên thứ ba – abi1964

+1

Thực tế thú vị, jonelo.jacksum.algorithm.Cksum có cùng giao diện với lớp CRC32 của Java nhưng cho cùng một kết quả là unix cksum. –

2

Bạn đã thử lớp CRC32 chưa?

http://download.oracle.com/javase/7/docs/api/java/util/zip/CRC32.html

Đây là crc 32 sử dụng gzip.

+3

Tôi đọc trực tuyến tại một số nơi mà thuật toán crc-32 của unix cksum không giống với thuật toán của gzip. Tôi đã không thử nghiệm điều này, nhưng nó có thể là sự thật. Sử dụng 'Jacksum' (xem ở trên) hoạt động tốt cho tôi. – Kowshik

+3

@Kowshik, tôi có thể xác minh rằng CRC32 của Java KHÔNG giống như/usr/bin/cksum –

+1

@Kowshik, hãy kiểm tra câu trả lời của tôi. –

0

Tuyên bố của Carlos Rendon, "Tôi có thể xác minh rằng CRC32 của Java KHÔNG giống như/usr/bin/cksum", không chính xác.

Như Peter Lawrey đã đề cập, bạn có thể sử dụng CRC32 của Java trực tiếp để có cùng kiểm tra như Unix/Linux cksum.

Cách đúng để làm điều đó là:

java.util.zip.CRC32 x = new java.util.zip.CRC32(); 
x.update(bytes); 
StdOut.println("CRC32 (via Java's library)  = " + Long.toHexString(x.getValue())); 

Nguồn: http://introcs.cs.princeton.edu/java/61data/CRC32.java.html

CRC mặc định sử dụng dựa trên các đa thức sử dụng cho lỗi CRC kiểm tra tại các mạng tiêu chuẩn ISO/IEC 8802-3: 1989.

+0

Nó chắc chắn trả về kết quả khác nhau cho tôi. Trong thực tế, máy tính của tôi (một máy Mac) có cả '/ usr/bin/cksum' và'/usr/bin/crc32'. 'cksum <(echo -n hello)' sản lượng '3287646509', trong khi' crc32 <(echo -n hello) 'sản lượng' 3610a686', và tôi cũng kiểm tra xem 'CRC32' của Java trả về cùng giá trị với dòng lệnh ' crc32' và KHÔNG có cùng giá trị với dòng lệnh 'cksum'. –

+0

Cũng trên máy Mac này, 'cksum -o 3 <(echo -n hello)' sản lượng '907060870' tương tự như '3610a686'. Vì vậy, 'cksum -o 3' không khớp với' CRC32' của Java. Nhưng đó không phải là thuật toán mặc định cho '/ usr/bin/cksum' trên máy này. –

+0

Thuật toán mặc định không phải là 32 bit. Đọc trang người đàn ông cksum để biết thêm chi tiết –

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