1990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/* 2990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Copyright (C) 2008 The Android Open Source Project 3990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 4990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * you may not use this file except in compliance with the License. 6990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * You may obtain a copy of the License at 7990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 8990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * 10990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Unless required by applicable law or agreed to in writing, software 11990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * See the License for the specific language governing permissions and 14990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * limitations under the License. 15990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */ 16990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 17990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpackage libcore.java.io; 18990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 19990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.ByteArrayInputStream; 20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.IOException; 21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.InputStream; 22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.PushbackInputStream; 23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.Assert; 24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase; 25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidPushbackInputStreamTest extends TestCase { 27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public void testPushbackInputStream() throws Exception { 29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson String str = "AbCdEfGhIjKlM\nOpQrStUvWxYz"; 30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson ByteArrayInputStream aa = new ByteArrayInputStream(str.getBytes()); 31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson ByteArrayInputStream ba = new ByteArrayInputStream(str.getBytes()); 32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson ByteArrayInputStream ca = new ByteArrayInputStream(str.getBytes()); 33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson PushbackInputStream a = new PushbackInputStream(aa, 7); 35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson try { 36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson a.unread("push".getBytes()); 37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson Assert.assertEquals("pushAbCdEfGhIjKlM\nOpQrStUvWxYz", read(a)); 38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } finally { 39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson a.close(); 40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 41990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson PushbackInputStream b = new PushbackInputStream(ba, 9); 43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson try { 44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson b.unread('X'); 45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson Assert.assertEquals("XAbCdEfGhI", read(b, 10)); 46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } finally { 47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson b.close(); 48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson PushbackInputStream c = new PushbackInputStream(ca); 51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson try { 52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson Assert.assertEquals("bdfhjl\nprtvxz", skipRead(c)); 53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } finally { 54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson c.close(); 55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public static String read(InputStream a) throws IOException { 59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson int r; 60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson StringBuilder builder = new StringBuilder(); 61990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson do { 62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson r = a.read(); 63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (r != -1) 64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson builder.append((char) r); 65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } while (r != -1); 66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson return builder.toString(); 67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public static String read(InputStream a, int x) throws IOException { 70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson byte[] b = new byte[x]; 71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson int len = a.read(b, 0, x); 72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (len < 0) { 73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson return ""; 74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson return new String(b, 0, len); 76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public static String skipRead(InputStream a) throws IOException { 79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson int r; 80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson StringBuilder builder = new StringBuilder(); 81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson do { 82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson a.skip(1); 83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson r = a.read(); 84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (r != -1) 85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson builder.append((char) r); 86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } while (r != -1); 87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson return builder.toString(); 88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson public static String markRead(InputStream a, int x, int y) throws IOException { 91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson int m = 0; 92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson int r; 93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson StringBuilder builder = new StringBuilder(); 94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson do { 95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson m++; 96990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson r = a.read(); 97990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (m == x) 98990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson a.mark((x + y)); 99990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (m == (x + y)) 100990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson a.reset(); 101990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson 102990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson if (r != -1) 103990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson builder.append((char) r); 104990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } while (r != -1); 105990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson return builder.toString(); 106990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson } 107990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson} 108