/* * Distributed as part of mchange-commons-java 0.2.11 * * Copyright (C) 2015 Machinery For Change, Inc. * * Author: Steve Waldman <swaldman@mchange.com> * * This library is free software; you can redistribute it and/or modify * it under the terms of EITHER: * * 1) The GNU Lesser General Public License (LGPL), version 2.1, as * published by the Free Software Foundation * * OR * * 2) The Eclipse Public License (EPL), version 1.0 * * You may choose which license to accept if you wish to redistribute * or modify this work. You may offer derivatives of this work * under the license you have chosen, or you may provide the same * choice of license which you have been offered here. * * This software 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. * * You should have received copies of both LGPL v2.1 and EPL v1.0 * along with this software; see the files LICENSE-EPL and LICENSE-LGPL. * If not, the text of these licenses are currently available at * * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php * */ package com.mchange.io; import java.io.*; import com.mchange.util.RobustMessageLogger; /** * @deprecated -- use com.mchange.v1.io.InputStreamUtils */ public final class InputStreamUtils { public static boolean compare(InputStream is1, InputStream is2, long num_bytes) throws IOException { int b; for (long num_read = 0; num_read < num_bytes; ++num_read) { if ((b = is1.read()) != is2.read()) return false; else if (b < 0) //both EOF break; } return true; } public static boolean compare(InputStream is1, InputStream is2) throws IOException { int b = 0; while (b >= 0) if ((b = is1.read()) != is2.read()) return false; return true; } public static byte[] getBytes(InputStream is, int max_len) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(max_len); for(int i = 0, b = is.read(); b >= 0 && i < max_len; b = is.read(), ++i) baos.write(b); return baos.toByteArray(); } public static byte[] getBytes(InputStream is) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); for(int b = is.read(); b >= 0; b = is.read()) baos.write(b); return baos.toByteArray(); } public static String getContentsAsString(InputStream is, String enc) throws IOException, UnsupportedEncodingException {return new String(getBytes(is), enc);} public static String getContentsAsString(InputStream is) throws IOException { try {return getContentsAsString(is, System.getProperty("file.encoding", "8859_1"));} catch (UnsupportedEncodingException e) { throw new InternalError("You have no default character encoding, and " + "iso-8859-1 is unsupported?!?!"); } } public static String getContentsAsString(InputStream is, int max_len, String enc) throws IOException, UnsupportedEncodingException {return new String(getBytes(is, max_len), enc);} public static String getContentsAsString(InputStream is, int max_len) throws IOException { try {return getContentsAsString(is, max_len, System.getProperty("file.encoding", "8859_1"));} catch (UnsupportedEncodingException e) { throw new InternalError("You have no default character encoding, and " + "iso-8859-1 is unsupported?!?!"); } } public static InputStream getEmptyInputStream() {return EMPTY_ISTREAM;} public static void attemptClose(InputStream is) {attemptClose(is, null);} public static void attemptClose(InputStream is, RobustMessageLogger logger) { try {is.close();} catch (IOException e) {if (logger != null) logger.log(e, "IOException trying to close InputStream");} catch (NullPointerException e) {if (logger != null) logger.log(e, "NullPointerException trying to close InputStream");} } public static void skipFully(InputStream is, long num_bytes) throws EOFException, IOException { long num_skipped = 0; while (num_skipped < num_bytes) { long just_skipped = is.skip(num_bytes - num_skipped); if (just_skipped > 0) num_skipped += just_skipped; else { int test_byte = is.read(); if (is.read() < 0) throw new EOFException("Skipped only " + num_skipped + " bytes to end of file."); else ++num_skipped; } } } /* Is it appropriate to treat this as a constant? Is it */ /* in any discernable sense changed by read() operations */ private static InputStream EMPTY_ISTREAM = new ByteArrayInputStream(new byte[0]); private InputStreamUtils() {} }