Mercurial > hg > release > icedtea-1.9
view overlays/nio2/openjdk/jdk/src/share/classes/java/io/Inputs.java @ 1721:e6d83e63e8e3
Update to b50 (02). Now builds using --with-icedtea.
2009-03-17 Andrew John Hughes <ahughes@redhat.com>
* overlays/nio2/openjdk/jdk/src/share/classes/java/nio/file/attribute/NamedAttributeView.java,
* overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java,
* overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/AbstractNamedAttributeView.java,
* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java,
* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/SolarisNamedAttributeView.java,
* overlays/nio2/openjdk/jdk/src/windows/classes/sun/nio/fs/WindowsNamedAttributeView.java,
* overlays/nio2/openjdk/jdk/test/java/nio/file/attribute/NamedAttributeView/Basic.java:
Removed; in b50 (renamed as in b99).
* patches/security/icedtea-6721753.patch: Removed; in b50.
* Makefile.am: Remove security patch.
* overlays/nio2/openjdk/jdk/src/share/classes/java/io/Inputs.java,
* overlays/nio2/openjdk/jdk/src/share/classes/java/io/Outputs.java,
* overlays/nio2/openjdk/jdk/src/share/demo/nio/ZipFileSystem/com/sun/nio/zipfs/ZipFileSystem.java:
Updated to nio2 b99.
* patches/icedtea-nio2.patch: Recreated against b50.
* patches/icedtea-pr261.patch: Likewise.
author | Andrew John Hughes <ahughes@redhat.com> |
---|---|
date | Tue, 17 Mar 2009 00:44:07 +0000 |
parents | 5bda1b46a64f |
children |
line wrap: on
line source
/* * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA conne02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package java.io; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; import java.nio.file.FileRef; import java.nio.file.attribute.Attributes; import java.nio.channels.Channels; import java.util.Scanner; import java.util.Collections; import java.util.Arrays; import java.util.ArrayList; import java.util.List; /** * {@note experimental} * This class consists exclusively of static methods that operate on input * sources. * * <p> The methods to read lines of text defined by this class recognize the * following as Unicode line terminators: * <ul> * <li> <code>\u000D</code> followed by <code>\u000A</code>, * CARRIAGE RETURN followed by LINE FEED </li> * <li> <code>\u000A</code>, LINE FEED </li> * <li> <code>\u000D</code>, CARRIAGE RETURN </li> * <li> <code>\u2028</code>, LINE SEPARATOR </li> * <li> <code>\u2029</code>, PARAGRAPH SEPARATOR </li> * <li> <code>\u0085</code>, NEXT LINE (NEL)</li> * </ul> * * @since 1.7 */ public final class Inputs { private Inputs() { } // initial buffer size when reading (or writing) private static final int INITIAL_BUFFER_SIZE = 8192; // checks that charset is supported private static void ensureCharsetIsSupported(String csn) { if (csn == null) throw new NullPointerException("'csn' is null"); if (!Charset.isSupported(csn)) throw new UnsupportedCharsetException(csn); } /** * Closes the given data source by invoking its {@link Closeable#close close} * method. If the {@code close} method throws an {@code IOException} then it * is silently ignored. If the source is already closed then invoking this * method has no effect. * * <p> This method should not be used to close destinations or output * streams that may be buffered. An I/O error may occur when flushing * buffered data. * * @param source * The data source */ public static void closeUnchecked(Closeable source) { try { source.close(); } catch (IOException ignore) { } } /** * Read all bytes from the specified file. When all bytes have been read, or * an I/O error occurs, then the file is closed. * * @param source * The data source * * @return A byte array containing the bytes read from the file * * @throws IOException * If an I/O error occurs * @throws OutOfMemoryError * If the required array size is too large */ public static byte[] readAllBytes(FileRef source) throws IOException { long size = Attributes.readBasicFileAttributes(source).size(); if (size > (long)Integer.MAX_VALUE) throw new OutOfMemoryError("Required array size too large"); InputStream in = Channels.newInputStream(source.newByteChannel()); try { return implReadAllBytes(in, Math.min((int)size, INITIAL_BUFFER_SIZE)); } finally { in.close(); } } /** * Read all bytes from the specified file. When all bytes have been read, or * an I/O error occurs, then the file is closed. * * @param source * The data source * * @return A byte array containing the bytes read from the file * * @throws IOException * If an I/O error occurs * @throws OutOfMemoryError * If the required array size is too large */ public static byte[] readAllBytes(File source) throws IOException { InputStream in = new FileInputStream(source); try { return implReadAllBytes(in, INITIAL_BUFFER_SIZE); } finally { in.close(); } } /** * Read all bytes from the specified input stream. * * <p> <b>Usage Example:</b> * Suppose we want to open a connection to a resource identified by a URI, * and read all bytes: * <pre> * byte[] content; * InputStream in = uri.toURL().openStream(); * try { * content = Inputs.readAllBytes(in); * } finally { * Inputs.closeUnchecked(in); * } * </pre> * * <p> On return, the input stream will be at end of stream. * * @param source * The data source * * @return A byte array containing the bytes read from the source * * @throws IOException * If an I/O error occurs * @throws OutOfMemoryError * If the required array size is too large */ public static byte[] readAllBytes(InputStream source) throws IOException { return implReadAllBytes(source, INITIAL_BUFFER_SIZE); } private static byte[] implReadAllBytes(InputStream source, int initialSize) throws IOException { byte[] buf = new byte[initialSize]; int nread = 0; int rem = buf.length; int n; while ((n = source.read(buf, nread, rem)) > 0) { nread += n; rem -= n; if (rem <= 0) { int newSize = buf.length << 1; if (newSize <= buf.length) { if (buf.length == Integer.MAX_VALUE) throw new OutOfMemoryError("Required array size too large"); newSize = Integer.MAX_VALUE; } rem = newSize - buf.length; buf = Arrays.copyOf(buf, newSize); } } return (buf.length == nread) ? buf : Arrays.copyOf(buf, nread); } /** * Read all lines from the specified file. Bytes from the file are * converted into characters using the specified charset. When all lines * have been read, or an I/O error occurs, then the file is closed. * * @param source * The data source * @param csn * The name of the charset to be used * * @throws java.nio.charset.UnsupportedCharsetException * If no support for the named charset is available * in this instance of the Java virtual machine * @throws java.nio.charset.MalformedInputException * If the file contains a byte sequence that is not legal for the * charset * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(FileRef source, String csn) throws IOException { ensureCharsetIsSupported(csn); Scanner s = new Scanner(source, csn); try { return implReadAllLines(s); } finally { s.close(); } } /** * Read all lines from the specified file. Bytes from the file are * converted into characters using the underlying platform's {@linkplain * java.nio.charset.Charset#defaultCharset() default charset}. When all lines * have been read, or an I/O error occurs, then the file is closed. * * @param source * The data source * * @throws java.nio.charset.MalformedInputException * If the file contains a byte sequence that is not legal for the * default charset * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(FileRef source) throws IOException { Scanner s = new Scanner(source); try { return implReadAllLines(s); } finally { s.close(); } } /** * Read all lines from the specified file. Bytes from the file are * converted into characters using the specified charset. When all lines * have been read, or an I/O error occurs, then the file is closed. * * @param source * The data source * @param csn * The name of the charset to be used * * @throws UnsupportedCharsetException * If no support for the named charset is available * in this instance of the Java virtual machine * @throws java.nio.charset.MalformedInputException * If the file contains a byte sequence that is not legal for the * charset * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(File source, String csn) throws IOException { ensureCharsetIsSupported(csn); Scanner s = new Scanner(source, csn); try { return implReadAllLines(s); } finally { s.close(); } } /** * Read all lines from the specified file. Bytes from the file are * converted into characters using the underlying platform's {@linkplain * Charset#defaultCharset() default charset}. When all lines have been read, * or an I/O error occurs, then the file is closed. * * @param source * The data source * @throws java.nio.charset.MalformedInputException * If the file contains a byte sequence that is not legal for the * default charset * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(File source) throws IOException { Scanner s = new Scanner(source); try { return implReadAllLines(s); } finally { s.close(); } } /** * Read all lines from the specified input stream. Bytes from the stream are * converted into characters using the specified charset. * * <p> On return, the input stream will be at end of stream. * * @param source * The input stream to read from * @param csn * The name of the charset to be used * * @throws UnsupportedCharsetException * If no support for the named charset is available * in this instance of the Java virtual machine * @throws java.nio.charset.MalformedInputException * If a byte sequence that is not legal for the charset is read * from the input * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(InputStream source, String csn) throws IOException { ensureCharsetIsSupported(csn); return implReadAllLines(new Scanner(source, csn)); } /** * Read all lines from the specified input stream. Bytes from the stream are * converted into characters using the underlying platform's {@linkplain * Charset#defaultCharset() default charset}. * * <p> On return, the input stream will be at end of stream. * * @param source * The input stream to read from * * @return An unmodifiable list of the lines read from the input stream * * @throws java.nio.charset.MalformedInputException * If a byte sequence that is not legal for the default charset is * read from the input * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(InputStream source) throws IOException { return implReadAllLines(new Scanner(source)); } /** * Read all lines from the from the specified source. * * <p> On return, the input source will be at end of stream. * * @param source * The input stream to read from * * @return An unmodifiable list of the lines read from source * * @throws IOException * If an I/O error occurs */ public static List<String> readAllLines(Readable source) throws IOException { return implReadAllLines(new Scanner(source)); } private static List<String> implReadAllLines(Scanner s) throws IOException { try { List<String> result = new ArrayList<String>(); while (s.hasNextLine()) { result.add(s.nextLine()); } return Collections.unmodifiableList(result); } finally { IOException ioe = s.ioException(); if (ioe != null) throw ioe; } } }