src/share/classes/java/nio/file/Files.java

Print this page

        

*** 23,45 **** * questions. */ package java.nio.file; - import java.nio.ByteBuffer; import java.nio.file.attribute.*; import java.nio.file.spi.FileSystemProvider; import java.nio.file.spi.FileTypeDetector; import java.nio.channels.FileChannel; import java.nio.channels.SeekableByteChannel; import java.io.Closeable; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; import java.io.UncheckedIOException; import java.util.*; --- 23,46 ---- * questions. */ package java.nio.file; import java.nio.file.attribute.*; import java.nio.file.spi.FileSystemProvider; import java.nio.file.spi.FileTypeDetector; + import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.SeekableByteChannel; import java.io.Closeable; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.io.BufferedReader; import java.io.BufferedWriter; + import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; import java.io.UncheckedIOException; import java.util.*;
*** 2992,3012 **** try (FileChannel fc = FileChannel.open(path)) { long size = fc.size(); if (size > (long)Integer.MAX_VALUE) throw new OutOfMemoryError("Required array size too large"); ! byte[] arr = new byte[(int)size]; ! ByteBuffer bb = ByteBuffer.wrap(arr); ! while (bb.hasRemaining()) { ! if (fc.read(bb) < 0) { ! // truncated ! break; } } - - int nread = bb.position(); - return (nread == size) ? arr : Arrays.copyOf(arr, nread); } } /** * Read all lines from a file. This method ensures that the file is --- 2993,3012 ---- try (FileChannel fc = FileChannel.open(path)) { long size = fc.size(); if (size > (long)Integer.MAX_VALUE) throw new OutOfMemoryError("Required array size too large"); ! try (InputStream fis = Channels.newInputStream(fc); ! ByteArrayOutputStream bos = new ByteArrayOutputStream((int)size) { ! @Override ! public byte[] toByteArray() { ! return (buf.length == count) ? buf : Arrays.copyOf(buf, count); } + }) { + copy(fis, bos); + return bos.toByteArray(); } } } /** * Read all lines from a file. This method ensures that the file is