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

Viktor Isaev commented on IO-486:
---------------------------------

OK, Sebb, I see your point.

But then, if so, {{FileUtils.readFileToByteArray()}} is not safe too, because 
it uses {{file.length()}}:

{code:java}
    public static byte[] readFileToByteArray(File file) throws IOException {
        InputStream in = null;
        try {
            in = openInputStream(file);
            return IOUtils.toByteArray(in, file.length());
        } finally {
            IOUtils.closeQuietly(in);
        }
    }
{code}

Here we may as well miss data, if OS returns a file length less then the real 
data size. Should this be fixed? What do you think?

By the way, in {{IOUtils.toByteArray()}}, which is called from 
{{FileUtils.readFileToByteArray()}}, there IS already a short-circuit for the 
case when {{size == 0}}:

{code:java}
    public static byte[] toByteArray(InputStream input, int size) throws 
IOException {

        if (size < 0) {
            throw new IllegalArgumentException("Size must be equal or greater 
than zero: " + size);
        }

        if (size == 0) {
            return new byte[0];
        }

        byte[] data = new byte[size];
        int offset = 0;
        int readed;

        while (offset < size && (readed = input.read(data, offset, size - 
offset)) != EOF) {
            offset += readed;
        }

        if (offset != size) {
            throw new IOException("Unexpected readed size. current: " + offset 
+ ", excepted: " + size);
        }

        return data;
    }
{code}

(However, we still open an input stream.)

So, my suggestion is to at least make these two guys ({{readFileToString()}} 
and {{readFileToByteArray()}}) consistent with each other in the sense of using 
{{file.length()}} and related short-circuits.

> FileUtils.readFileToString() can immediately return empty string if file 
> length is zero
> ---------------------------------------------------------------------------------------
>
>                 Key: IO-486
>                 URL: https://issues.apache.org/jira/browse/IO-486
>             Project: Commons IO
>          Issue Type: Improvement
>            Reporter: Viktor Isaev
>
> If {{file.length() == 0}}, there is no point of doing extra work of opening 
> and closing an input stream - we can return an empty string right away.
> Same applies for {{FileUtils.readFileToByteArray()}} and 
> {{FileUtils.readLines()}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to