001 package com.croftsoft.core.io; 002 003 import java.io.*; 004 import java.util.*; 005 006 /********************************************************************* 007 * 008 * A library of static methods for the manipulation of input and 009 * output streams. 010 * 011 * <P> 012 * 013 * @version 014 * 2000-04-30 015 * @since 016 * 1999-08-15 017 * @author 018 * <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A> 019 *********************************************************************/ 020 021 public final class StreamLib 022 ////////////////////////////////////////////////////////////////////// 023 ////////////////////////////////////////////////////////////////////// 024 { 025 026 private StreamLib ( ) { } 027 028 ////////////////////////////////////////////////////////////////////// 029 ////////////////////////////////////////////////////////////////////// 030 031 public static void main ( String [ ] args ) 032 ////////////////////////////////////////////////////////////////////// 033 { 034 System.out.println ( System.getProperty ( "file.encoding" ) ); 035 } 036 037 /********************************************************************* 038 * Replaces bytes in a stream as it is being copied from the 039 * InputStream to the OutputStream. 040 * 041 * <P> 042 * 043 * Does not automatically close the streams after completion. 044 * Maintains an internal buffer with the same size as oldBytes. 045 * 046 * @return 047 * Returns true if bytes were replaced. 048 *********************************************************************/ 049 public static boolean replaceBytes ( 050 InputStream in, 051 OutputStream out, 052 byte [ ] oldBytes, 053 byte [ ] newBytes ) 054 throws IOException 055 ////////////////////////////////////////////////////////////////////// 056 { 057 byte [ ] bufBytes = new byte [ oldBytes.length ]; 058 059 boolean hasChanged = false; 060 061 int i; 062 063 byte b; 064 065 int index = 0; 066 067 while ( ( i = in.read ( ) ) > -1 ) 068 { 069 b = ( byte ) i; 070 071 if ( b == oldBytes [ index ] ) 072 { 073 if ( index + 1 < bufBytes.length ) 074 { 075 bufBytes [ index++ ] = b; 076 } 077 else 078 { 079 out.write ( newBytes ); 080 081 hasChanged = true; 082 083 index = 0; 084 } 085 } 086 else 087 { 088 out.write ( bufBytes, 0, index ); 089 090 out.write ( b ); 091 092 index = 0; 093 } 094 } 095 096 return hasChanged; 097 } 098 099 /********************************************************************* 100 * Converts the bytes of the InputStream to a String. 101 * 102 * <P> 103 * 104 * Does not automatically close the stream after completion. 105 *********************************************************************/ 106 public static String toString ( 107 InputStream inputStream, 108 String encoding ) 109 throws IOException, UnsupportedEncodingException 110 ////////////////////////////////////////////////////////////////////// 111 { 112 ByteArrayOutputStream byteArrayOutputStream 113 = new ByteArrayOutputStream ( ); 114 115 int i; 116 117 while ( ( i = inputStream.read ( ) ) > -1 ) 118 { 119 byteArrayOutputStream.write ( i ); 120 } 121 122 return byteArrayOutputStream.toString ( encoding ); 123 } 124 125 /********************************************************************* 126 * Converts the bytes of the InputStream to a String. 127 * 128 * <P> 129 * 130 * Does not automatically close the stream after completion. 131 *********************************************************************/ 132 public static String toString ( 133 InputStream inputStream ) 134 throws IOException 135 ////////////////////////////////////////////////////////////////////// 136 { 137 ByteArrayOutputStream byteArrayOutputStream 138 = new ByteArrayOutputStream ( ); 139 140 int i; 141 142 while ( ( i = inputStream.read ( ) ) > -1 ) 143 { 144 byteArrayOutputStream.write ( i ); 145 } 146 147 return byteArrayOutputStream.toString ( ); 148 } 149 150 ////////////////////////////////////////////////////////////////////// 151 ////////////////////////////////////////////////////////////////////// 152 }