commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: svn commit: r1743780 - in /commons/proper/codec/trunk/src: changes/changes.xml main/java/org/apache/commons/codec/digest/Digest.java
Date Sat, 14 May 2016 15:38:43 GMT
On 14 May 2016 at 14:48, Gary Gregory <garydgregory@gmail.com> wrote:
> It might not matter here but in general I've stopped using foreach over
> arrays because it creates an iterator, which means more garbage.

Are you sure that Java creates an iterator for arrays?

Besides, leaving the array.length calculation in the loop is wasteful,
at least until the optimiser notices.

> You're probably right that a foreach would be better just for this class.

Any case where it is necessary/desirable to use an old-style for loop
should have a comment to explain why.

> Gary
> On May 14, 2016 3:17 AM, "sebb" <sebbaz@gmail.com> wrote:
>
>> Why does the code not use generic for loops?
>>
>> If there is a good reason for this, it should be documented.
>>
>> If not, the code should use the new generic loop as it's simpler and
>> less prone to errors (cannot use wrong index).
>>
>> On 14 May 2016 at 02:47,  <ggregory@apache.org> wrote:
>> > Author: ggregory
>> > Date: Sat May 14 01:47:35 2016
>> > New Revision: 1743780
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1743780&view=rev
>> > Log:
>> > [CODEC-212] Create a minimal Digest command line utility:
>> org.apache.commons.codec.digest.Digest.
>> >
>> > Added:
>> >
>>  commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Digest.java
>> > Modified:
>> >     commons/proper/codec/trunk/src/changes/changes.xml
>> >
>> > Modified: commons/proper/codec/trunk/src/changes/changes.xml
>> > URL:
>> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/changes/changes.xml?rev=1743780&r1=1743779&r2=1743780&view=diff
>> >
>> ==============================================================================
>> > --- commons/proper/codec/trunk/src/changes/changes.xml (original)
>> > +++ commons/proper/codec/trunk/src/changes/changes.xml Sat May 14
>> 01:47:35 2016
>> > @@ -47,6 +47,7 @@ The <action> type attribute can be add,u
>> >        <action dev="ggregory" type="fix" issue="CODEC-207" due-to="Gary
>> Gregory">Charsets Javadoc breaks build when using Java 8</action>
>> >        <action dev="ggregory" type="fix" issue="CODEC-199" due-to="Yossi
>> Tamari">Bug in HW rule in Soundex</action>
>> >        <action dev="ggregory" type="fix" issue="CODEC-209" due-to="Gary
>> Gregory">Javadoc for SHA-224 DigestUtils methods should mention Java 1.8.0
>> restriction instead of 1.4.0.</action>
>> > +      <action dev="ggregory" type="add" issue="CODEC-212" due-to="Gary
>> Gregory">Create a minimal Digest command line utility:
>> org.apache.commons.codec.digest.Digest</action>
>> >        <action dev="ggregory" type="add" issue="CODEC-211" due-to="Gary
>> Gregory">Create enum MessageDigestAlgorithm and deprecate class
>> MessageDigestAlgorithms</action>
>> >        <action dev="ggregory" type="add" issue="CODEC-210" due-to="Gary
>> Gregory">Add DigestUtils.getDigest(String, MessageDigest)</action>
>> >        <action dev="ggregory" type="add" issue="CODEC-208" due-to="Gary
>> Gregory">Make some DigestUtils APIs public</action>
>> >
>> > Added:
>> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Digest.java
>> > URL:
>> http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Digest.java?rev=1743780&view=auto
>> >
>> ==============================================================================
>> > ---
>> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Digest.java
>> (added)
>> > +++
>> commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Digest.java
>> Sat May 14 01:47:35 2016
>> > @@ -0,0 +1,120 @@
>> > +/*
>> > + * Licensed to the Apache Software Foundation (ASF) under one or more
>> > + * contributor license agreements.  See the NOTICE file distributed with
>> > + * this work for additional information regarding copyright ownership.
>> > + * The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> > + * (the "License"); you may not use this file except in compliance with
>> > + * the License.  You may obtain a copy of the License at
>> > + *
>> > + *      http://www.apache.org/licenses/LICENSE-2.0
>> > + *
>> > + * Unless required by applicable law or agreed to in writing, software
>> > + * distributed under the License is distributed on an "AS IS" BASIS,
>> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> > + * See the License for the specific language governing permissions and
>> > + * limitations under the License.
>> > + */
>> > +package org.apache.commons.codec.digest;
>> > +
>> > +import java.io.File;
>> > +import java.io.IOException;
>> > +import java.security.MessageDigest;
>> > +
>> > +import org.apache.commons.codec.binary.Hex;
>> > +
>> > +/**
>> > + * A minimal command line to run digest over files.
>> > + *
>> > + * @see #main(String[])
>> > + */
>> > +public class Digest {
>> > +
>> > +    /**
>> > +     * Runs the digest algorithm in {@code args[0]} on the file in
>> {@code args[1]}. If there is no {@code args[1]}, use
>> > +     * standard input.
>> > +     *
>> > +     * <p>
>> > +     * The algorithm can also be {@code ALL} or {@code *} to output one
>> line for each known algorithm.
>> > +     * </p>
>> > +     *
>> > +     * @param args
>> > +     *            {@code args[0]} is one of {@link
>> MessageDigestAlgorithm} name, {@link MessageDigest} name, {@code ALL}
>> > +     *            , or {@code *}. {@code args[1]} is a FILE.
>> > +     * @throws IOException
>> > +     */
>> > +    public static void main(String[] args) throws IOException {
>> > +        new Digest(args).run();
>> > +    }
>> > +
>> > +    private final String algorithm;
>> > +    private final String[] args;
>> > +    private final String source;
>> > +
>> > +    private Digest(final String[] args) {
>> > +        if (args == null) {
>> > +            throw new IllegalArgumentException("args");
>> > +        }
>> > +        if (args.length == 0) {
>> > +            throw new IllegalArgumentException(
>> > +                    String.format("Usage: java %s [algorithm]
>> [FILE|DIRECTORY]", Digest.class.getName()));
>> > +        }
>> > +        this.args = args;
>> > +        algorithm = args[0];
>> > +        source = args.length == 1 ? null : args[1];
>> > +    }
>> > +
>> > +    private void println(String prefix, final byte[] digest) {
>> > +        final String sourceDesc = source == null ? "-" : source;
>> > +        System.out.println(prefix + Hex.encodeHexString(digest) + " " +
>> sourceDesc);
>> > +    }
>> > +
>> > +    private void run() throws IOException {
>> > +        if (algorithm.equalsIgnoreCase("ALL") || algorithm.equals("*"))
>> {
>> > +            run(MessageDigestAlgorithm.values());
>> > +            return;
>> > +        }
>> > +        final MessageDigest messageDigest =
>> DigestUtils.getDigest(algorithm, null);
>> > +        if (messageDigest != null) {
>> > +            run("", messageDigest);
>> > +        } else {
>> > +            run("",
>> MessageDigestAlgorithm.valueOf(algorithm).getMessageDigest());
>> > +        }
>> > +    }
>> > +
>> > +    private void run(MessageDigestAlgorithm[] digestAlgorithms) throws
>> IOException {
>> > +        for (int i = 0; i < digestAlgorithms.length; i++) {
>> > +            final MessageDigestAlgorithm messageDigestAlgorithm =
>> digestAlgorithms[i];
>> > +            if (messageDigestAlgorithm.isAvailable()) {
>> > +                run(messageDigestAlgorithm.getAlgorithm() + " ",
>> messageDigestAlgorithm);
>> > +            }
>> > +        }
>> > +    }
>> > +
>> > +    private void run(String prefix, final MessageDigest messageDigest)
>> throws IOException {
>> > +        if (source == null) {
>> > +            println(prefix, DigestUtils.digest(messageDigest,
>> System.in));
>> > +            return;
>> > +        }
>> > +        final File file = new File(source);
>> > +        if (file.isFile()) {
>> > +            println(prefix, DigestUtils.digest(messageDigest, file));
>> > +        } else if (file.isDirectory()) {
>> > +            run(prefix, messageDigest, file.listFiles());
>> > +        }
>> > +    }
>> > +
>> > +    private void run(String prefix, MessageDigest messageDigest, File[]
>> files) throws IOException {
>> > +        for (int i = 0; i < files.length; i++) {
>> > +            println(prefix, DigestUtils.digest(messageDigest,
>> files[i]));
>> > +        }
>> > +    }
>> > +
>> > +    private void run(String prefix, final MessageDigestAlgorithm
>> messageDigestAlgorithm) throws IOException {
>> > +        run(prefix, messageDigestAlgorithm.getMessageDigest());
>> > +    }
>> > +
>> > +    @Override
>> > +    public String toString() {
>> > +        return String.format("%s[%s]", super.toString(), args);
>> > +    }
>> > +}
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message