Example usage for org.apache.commons.io.input ReaderInputStream read

List of usage examples for org.apache.commons.io.input ReaderInputStream read

Introduction

In this page you can find the example usage for org.apache.commons.io.input ReaderInputStream read.

Prototype

@Override
public int read(byte[] b) throws IOException 

Source Link

Document

Read the specified number of bytes into an array.

Usage

From source file:com.codealot.textstore.FileStore.java

@Override
public String storeText(final Reader reader) throws IOException {
    Objects.requireNonNull(reader, "No reader provided");

    // make the digester
    final MessageDigest digester = getDigester();

    // make temp file
    final Path textPath = Paths.get(this.storeRoot, UUID.randomUUID().toString());

    // stream to file, building digest
    final ReaderInputStream readerAsBytes = new ReaderInputStream(reader, StandardCharsets.UTF_8);
    try {//from  w  ww .  jav a 2  s  . com
        final byte[] bytes = new byte[1024];
        int readLength = 0;
        long totalRead = 0L;

        while ((readLength = readerAsBytes.read(bytes)) > 0) {
            totalRead += readLength;

            digester.update(bytes, 0, readLength);

            final byte[] readBytes = Arrays.copyOf(bytes, readLength);
            Files.write(textPath, readBytes, StandardOpenOption.CREATE, StandardOpenOption.WRITE,
                    StandardOpenOption.APPEND);
        }
        // check that something was read
        if (totalRead == 0L) {
            return this.storeText("");
        }
        // make the hash
        final String hash = byteToHex(digester.digest());

        // store the text, if new
        final Path finalPath = Paths.get(this.storeRoot, hash);
        if (Files.exists(finalPath)) {
            // already existed, so delete uuid named one
            Files.deleteIfExists(textPath);
        } else {
            // rename the file
            Files.move(textPath, finalPath);
        }
        return hash;
    } finally {
        if (readerAsBytes != null) {
            readerAsBytes.close();
        }
    }
}