You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Simon Spero (JIRA)" <ji...@apache.org> on 2017/07/05 17:48:00 UTC

[jira] [Commented] (CODEC-171) Add support for CRC32-C

    [ https://issues.apache.org/jira/browse/CODEC-171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16075134#comment-16075134 ] 

Simon Spero commented on CODEC-171:
-----------------------------------

This class becomes redundant in JDK 9, which introduces [java.util.zip.CRC32C|http://download.java.net/java/jdk9/docs/api/java/util/zip/CRC32C.html], which as one might expect, implements j.u.z.Checksum.

Both implementations use the same basic approach. The main differences are (a) that the hadoop/Commons Codec implementation has hardcoded lookup tables, whilst the oracle one calculates them on startup, and (b) a few methods like these :

{code:java}
    /** Updates the CRC-32C checksum with the specified array of bytes.   */
    @HotSpotIntrinsicCandidate
    private static int updateBytes(int crc, byte[] b, int off, int end) {
         [...]
    }
    /**Updates the CRC-32C checksum reading from the specified address. */
    @HotSpotIntrinsicCandidate
    private static int updateDirectByteBuffer(int crc, long address, int off, int end) {
         [...]
     }
{code}
 
Notice the HotSpotIntrinsicCandidate annotations... on hotspot, the java code for these methods will almost certainly not get called; instead calls to the methods will be replaced by architecture specific code, using any available hardware support.  

The commons codec code is useful for  jdk 8 and earlier, but should not be used on 9. 
 One possible approach would be to generate a multi-release jar  with a JDK 9+ specific version of the code that delegates to the native implementation (the class if final, so delegation is required).   Current maven support for MR jars is... incomplete... 

> Add support for CRC32-C
> -----------------------
>
>                 Key: CODEC-171
>                 URL: https://issues.apache.org/jira/browse/CODEC-171
>             Project: Commons Codec
>          Issue Type: Improvement
>            Reporter: Brett Okken
>             Fix For: 1.11
>
>
> Add a java CRC32-C java.util.zip.Checksum implementation.
> There is a PureJavaCrc32C implementation that is part of apache-hadoop-common. It would be great to have that more easily consummable with far fewer transitive dependencies.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)