1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.io; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.charset.Charset; 21f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilsonimport java.nio.charset.IllegalCharsetNameException; 22b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughesimport java.util.Arrays; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Formatter; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.IllegalFormatException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Wraps an existing {@link OutputStream} and provides convenience methods for 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * writing common data types in a human readable format. This is not to be 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * confused with DataOutputStream which is used for encoding common data types 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * so that they can be read back in. No {@code IOException} is thrown by this 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class. Instead, callers should use {@link #checkError()} to see if a problem 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has occurred in this stream. 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughespublic class PrintStream extends FilterOutputStream implements Appendable, Closeable { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates whether or not this PrintStream has incurred an error. 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean ioError; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates whether or not this PrintStream should flush its contents after 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * printing a new line. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes private boolean autoFlush; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String encoding; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with {@code out} as its target 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. By default, the new print stream does not automatically flush its 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contents to the target stream when a newline is encountered. 53f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param out 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target output stream. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code out} is {@code null}. 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream(OutputStream out) { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(out); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out == null) { 62d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("out == null"); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with {@code out} as its target 68b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * stream. The parameter {@code autoFlush} determines if the print stream 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * automatically flushes its contents to the target stream when a newline is 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encountered. 71f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param out 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target output stream. 74b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * @param autoFlush 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates whether to flush contents upon encountering a 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * newline sequence. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code out} is {@code null}. 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public PrintStream(OutputStream out, boolean autoFlush) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(out); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out == null) { 83d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("out == null"); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes this.autoFlush = autoFlush; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with {@code out} as its target 909b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * stream and using the character encoding {@code charsetName} while writing. The 91b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * parameter {@code autoFlush} determines if the print stream automatically 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * flushes its contents to the target stream when a newline is encountered. 93f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param out 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target output stream. 96b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * @param autoFlush 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicates whether or not to flush contents upon encountering a 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * newline sequence. 999b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * @param charsetName 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the non-null string describing the desired character encoding. 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 1029b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if {@code out} or {@code charsetName} are {@code null}. 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedEncodingException 1049b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if the encoding specified by {@code charsetName} is not supported. 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1069b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes public PrintStream(OutputStream out, boolean autoFlush, String charsetName) 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws UnsupportedEncodingException { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(out); 109d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root if (out == null) { 110d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("out == null"); 1119b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes } else if (charsetName == null) { 1129b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes throw new NullPointerException("charsetName == null"); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes this.autoFlush = autoFlush; 115f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson try { 1169b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes if (!Charset.isSupported(charsetName)) { 1179b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes throw new UnsupportedEncodingException(charsetName); 118f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 119f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } catch (IllegalCharsetNameException e) { 1209b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes throw new UnsupportedEncodingException(charsetName); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1229b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes encoding = charsetName; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with {@code file} as its target. The 12799e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * VM's default character set is used for character encoding. 128f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param file 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target file. If the file already exists, its contents are 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * removed, otherwise a new file is created. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws FileNotFoundException 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while opening or creating the target file. 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream(File file) throws FileNotFoundException { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(new FileOutputStream(file)); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with {@code file} as its target. The 1419b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * character set named {@code charsetName} is used for character encoding. 142f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param file 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target file. If the file already exists, its contents are 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * removed, otherwise a new file is created. 1469b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * @param charsetName 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the character set used for character encoding. 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws FileNotFoundException 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while opening or creating the target file. 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 1519b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if {@code charsetName} is {@code null}. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedEncodingException 1539b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if the encoding specified by {@code charsetName} is not supported. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1559b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes public PrintStream(File file, String charsetName) throws FileNotFoundException, 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project UnsupportedEncodingException { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(new FileOutputStream(file)); 1589b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes if (charsetName == null) { 1599b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes throw new NullPointerException("charsetName == null"); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1619b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes if (!Charset.isSupported(charsetName)) { 1629b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes throw new UnsupportedEncodingException(charsetName); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1649b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes encoding = charsetName; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with the file identified by 16999e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * {@code fileName} as its target. The VM's default character 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set is used for character encoding. 171f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fileName 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target file's name. If the file already exists, its 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contents are removed, otherwise a new file is created. 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws FileNotFoundException 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while opening or creating the target file. 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream(String fileName) throws FileNotFoundException { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(new File(fileName)); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code PrintStream} with the file identified by 1849b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * {@code fileName} as its target. The character set named {@code charsetName} is 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used for character encoding. 186f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fileName 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target file's name. If the file already exists, its 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contents are removed, otherwise a new file is created. 1909b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * @param charsetName 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the character set used for character encoding. 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws FileNotFoundException 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while opening or creating the target file. 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 1959b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if {@code charsetName} is {@code null}. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedEncodingException 1979b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes * if the encoding specified by {@code charsetName} is not supported. 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1999b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes public PrintStream(String fileName, String charsetName) 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws FileNotFoundException, UnsupportedEncodingException { 2019b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes this(new File(fileName), charsetName); 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Flushes this stream and returns the value of the error flag. 206f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if either an {@code IOException} has been thrown 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * previously or if {@code setError()} has been called; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise. 210f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @see #setError() 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean checkError() { 21355392539fea537abfb6581b474918f9d611fba27Jesse Wilson OutputStream delegate = out; 21455392539fea537abfb6581b474918f9d611fba27Jesse Wilson if (delegate == null) { 21555392539fea537abfb6581b474918f9d611fba27Jesse Wilson return ioError; 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 21755392539fea537abfb6581b474918f9d611fba27Jesse Wilson 21855392539fea537abfb6581b474918f9d611fba27Jesse Wilson flush(); 21955392539fea537abfb6581b474918f9d611fba27Jesse Wilson return ioError || delegate.checkError(); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 223e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes * Sets the error state of the stream to false. 224e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes * @since 1.6 225e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes */ 226e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes protected void clearError() { 227e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes ioError = false; 228e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes } 229e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes 230e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes /** 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Closes this print stream. Flushes this stream and then closes the target 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. If an I/O error occurs, this stream's error state is set to 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true}. 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void close() { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project flush(); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out != null) { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.close(); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out = null; 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Ensures that all pending data is sent out to the target stream. It also 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * flushes the target stream. If an I/O error occurs, this stream's error 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * state is set to {@code true}. 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void flush() { 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out != null) { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.flush(); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ignored, fall through to setError 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2673106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * Formats {@code args} according to the format string {@code format}, and writes the result 2683106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * to this stream. This method uses the user's default locale. 2693106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 270f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2713106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * @param format the format string (see {@link java.util.Formatter#format}) 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param args 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list of arguments passed to the formatter. If there are 2743106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * more arguments than required by {@code format}, 2753106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * additional arguments are ignored. 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalFormatException 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the format string is illegal or incompatible with the 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * arguments, if there are not enough arguments or if any other 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error regarding the format string or arguments is detected. 2813106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * @throws NullPointerException if {@code format == null} 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream format(String format, Object... args) { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(Locale.getDefault(), format, args); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes a string formatted by an intermediate {@link Formatter} to this 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream using the specified locale, format string and arguments. 290f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param l 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale used in the method. No localization will be applied 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code l} is {@code null}. 2945dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @param format the format string (see {@link java.util.Formatter#format}) 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param args 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list of arguments passed to the formatter. If there are 2975dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * more arguments than required by {@code format}, 2985dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * additional arguments are ignored. 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalFormatException 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the format string is illegal or incompatible with the 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * arguments, if there are not enough arguments or if any other 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error regarding the format string or arguments is detected. 3045dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @throws NullPointerException if {@code format == null} 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream format(Locale l, String format, Object... args) { 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (format == null) { 308b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new NullPointerException("format == null"); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Formatter(this, l).format(format, args); 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Prints a formatted string. The behavior of this method is the same as 31699e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * this stream's {@code #format(String, Object...)} method. 31799e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * 31899e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * <p>The {@code Locale} used is the user's default locale. 31999e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 320f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 3215dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @param format the format string (see {@link java.util.Formatter#format}) 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param args 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list of arguments passed to the formatter. If there are 3245dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * more arguments than required by {@code format}, 3255dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * additional arguments are ignored. 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalFormatException 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the format string is illegal or incompatible with the 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * arguments, if there are not enough arguments or if any other 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error regarding the format string or arguments is detected. 3315dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @throws NullPointerException if {@code format == null} 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream printf(String format, Object... args) { 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(format, args); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Prints a formatted string. The behavior of this method is the same as 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this stream's {@code #format(Locale, String, Object...)} method. 340f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param l 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale used in the method. No localization will be applied 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code l} is {@code null}. 3445dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @param format the format string (see {@link java.util.Formatter#format}) 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param args 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list of arguments passed to the formatter. If there are 3475dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * more arguments than required by {@code format}, 3485dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * additional arguments are ignored. 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalFormatException 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the format string is illegal or incompatible with the 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * arguments, if there are not enough arguments or if any other 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error regarding the format string or arguments is detected. 3545dc59cfad86607a8348c4561ec91584462aa058dElliott Hughes * @throws NullPointerException if {@code format == null}. 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream printf(Locale l, String format, Object... args) { 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(l, format, args); 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Put the line separator String onto the print stream. 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void newline() { 364b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(System.lineSeparator()); 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 368b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the character array {@code chars}. 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 370b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(char[] chars) { 371b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(new String(chars, 0, chars.length)); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 375b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the char {@code c}. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 377b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(char c) { 378b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(c)); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 382b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the double {@code d}. 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 384b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(double d) { 385b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(d)); 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 389b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the float {@code f}. 390f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 391b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(float f) { 392b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(f)); 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 396b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the int {@code i}. 397f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 398b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(int i) { 399b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(i)); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 403b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the long {@code l}. 404f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 405b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(long l) { 406b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(l)); 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 410b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the Object {@code o}, or {@code "null"}. 411f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 412b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(Object o) { 413b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(o)); 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Prints a string to the target stream. The string is converted to an array 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of bytes using the encoding chosen during the construction of this 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. The bytes are then written to the target stream with 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code write(int)}. 421b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * 422b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * <p>If an I/O error occurs, this stream's error state is set to {@code true}. 423f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param str 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to print to the target stream. 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #write(int) 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void print(String str) { 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out == null) { 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (str == null) { 434f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes print("null"); 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding == null) { 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project write(str.getBytes()); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project write(str.getBytes(encoding)); 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 450b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the boolean {@code b}. 451f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 452b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void print(boolean b) { 453b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(String.valueOf(b)); 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 457b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints a newline. 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void println() { 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newline(); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 464b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the character array {@code chars} followed by a newline. 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 466b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(char[] chars) { 467b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(new String(chars, 0, chars.length)); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 471b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the char {@code c} followed by a newline. 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 473b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(char c) { 474b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(c)); 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 478b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the double {@code d} followed by a newline. 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 480b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(double d) { 481b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(d)); 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 485b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the float {@code f} followed by a newline. 486f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 487b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(float f) { 488b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(f)); 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 492b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the int {@code i} followed by a newline. 493f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 494b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(int i) { 495b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(i)); 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 499b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the long {@code l} followed by a newline. 500f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 501b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(long l) { 502b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(l)); 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 506b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the Object {@code o}, or {@code "null"}, 507b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * followed by a newline. 508f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 509b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(Object o) { 510b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(o)); 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 514b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints a string followed by a newline. The string is converted to an array of bytes using 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the encoding chosen during the construction of this stream. The bytes are 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then written to the target stream with {@code write(int)}. 517b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * 518b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * <p>If an I/O error occurs, this stream's error state is set to {@code true}. 519f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param str 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to print to the target stream. 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #write(int) 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void println(String str) { 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project print(str); 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newline(); 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 530b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Prints the string representation of the boolean {@code b} followed by a newline. 531f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 532b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public void println(boolean b) { 533b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes println(String.valueOf(b)); 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 537e51cae060bf9543c7b786c3d7f297fab8a551acbElliott Hughes * Sets the error flag of this print stream to true. 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setError() { 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ioError = true; 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes {@code count} bytes from {@code buffer} starting at {@code offset} 545b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * to the target stream. If autoFlush is set, this stream gets flushed after 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * writing the buffer. 547b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * 548b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * <p>This stream's error flag is set to {@code true} if this stream is closed 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or an I/O error occurs. 550f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer to be written. 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the first byte in {@code buffer} to write. 5555839b909d9528b7726e678a4b696ed37df15d897Jesse Wilson * @param length 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bytes in {@code buffer} to write. 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code offset < 0} or {@code count < 0}, or if {@code 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset + count} is bigger than the length of {@code buffer}. 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #flush() 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 5635839b909d9528b7726e678a4b696ed37df15d897Jesse Wilson public void write(byte[] buffer, int offset, int length) { 564b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkOffsetAndCount(buffer.length, offset, length); 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (this) { 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out == null) { 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 5715839b909d9528b7726e678a4b696ed37df15d897Jesse Wilson out.write(buffer, offset, length); 572b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes if (autoFlush) { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project flush(); 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Writes one byte to the target stream. Only the least significant byte of 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer {@code oneByte} is written. This stream is flushed if 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code oneByte} is equal to the character {@code '\n'} and this stream is 585b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * set to autoFlush. 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This stream's error flag is set to {@code true} if it is closed or an I/O 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error occurs. 589f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param oneByte 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte to be written 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public synchronized void write(int oneByte) { 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (out == null) { 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.write(oneByte); 60155392539fea537abfb6581b474918f9d611fba27Jesse Wilson int b = oneByte & 0xFF; 60255392539fea537abfb6581b474918f9d611fba27Jesse Wilson // 0x0A is ASCII newline, 0x15 is EBCDIC newline. 603f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes boolean isNewline = b == 0x0A || b == 0x15; 604b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes if (autoFlush && isNewline) { 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project flush(); 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setError(); 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 613b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Appends the char {@code c}. 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PrintStream append(char c) { 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project print(c); 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 622b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Appends the CharSequence {@code charSequence}, or {@code "null"}. 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 625b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public PrintStream append(CharSequence charSequence) { 626b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes if (charSequence == null) { 627b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes print("null"); 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 629b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(charSequence.toString()); 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 635b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * Appends a subsequence of CharSequence {@code charSequence}, or {@code "null"}. 636f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 637b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * @param charSequence 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the character sequence appended to the target stream. 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the first char in the character sequence appended 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the target stream. 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the character following the last character of the 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subsequence appended to the target stream. 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this stream. 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}, {@code start < 0}, {@code end < 0} or 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * either {@code start} or {@code end} are greater or equal than 649b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes * the length of {@code charSequence}. 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 651b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes public PrintStream append(CharSequence charSequence, int start, int end) { 652b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes if (charSequence == null) { 653b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes charSequence = "null"; 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 655b4acb463582a510894aeb85f4fa8f35b339449c8Elliott Hughes print(charSequence.subSequence(start, end).toString()); 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 659