1a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden/* 2a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * Copyright (C) 2012 The Android Open Source Project 3a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * 4a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * Licensed under the Apache License, Version 2.0 (the "License"); 5a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * you may not use this file except in compliance with the License. 6a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * You may obtain a copy of the License at 7a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * 8a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * http://www.apache.org/licenses/LICENSE-2.0 9a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * 10a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * Unless required by applicable law or agreed to in writing, software 11a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * distributed under the License is distributed on an "AS IS" BASIS, 12a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * See the License for the specific language governing permissions and 14a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * limitations under the License. 15a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden */ 16a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 17a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.ByteArrayInputStream; 18a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.ByteArrayOutputStream; 19a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.IOException; 20a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.ObjectInputStream; 21a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.ObjectOutputStream; 22a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenimport java.io.Serializable; 23a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 24a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden/** 25a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden * Exercise serialization. 26a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden */ 27a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenpublic class Main { 28a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 29a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden public static void main(String[] args) { 30a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden testObjectSerialization(); 31a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 32a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 33a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden static void testObjectSerialization() { 34a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden byte[] serialData; 35a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 36a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden try { 37a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden serialData = createStream(); 38a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden checkStream(serialData); 39a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } catch (IOException ioe) { 40a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden throw new RuntimeException(ioe); 41a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 42a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 43a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 44a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden static byte[] createStream() throws IOException { 45a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); 46a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden ObjectOutputStream objStream = new ObjectOutputStream(byteStream); 47a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 48a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Sub sub = new Sub('X'); 49a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden objStream.writeObject(sub); 50a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden byte[] bytes = byteStream.toByteArray(); 51a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 52a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden objStream.close(); 53a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden byteStream.close(); 54a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden return bytes; 55a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 56a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 57a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden static void checkStream(byte[] input) throws IOException { 58a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden ByteArrayInputStream byteStream = new ByteArrayInputStream(input); 59a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden ObjectInputStream objStream = new ObjectInputStream(byteStream); 60a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 61a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Sub sub; 62a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden try { 63a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden sub = (Sub) objStream.readObject(); 64a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } catch (ClassNotFoundException cnfe) { 65a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden throw new RuntimeException(cnfe); 66a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 67a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 68a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden objStream.close(); 69a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden byteStream.close(); 70a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 71a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden sub.check(); 72a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 73a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden} 74a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 75a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenclass Base implements Serializable { 76a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden private static final long serialVersionUID = 12345; 77a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 78a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Boolean one; 79a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Integer two; 80a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden String three; 81a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 82a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden public Base() { 83a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden one = true; 84a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden two = Integer.valueOf(2); 85a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden three = "three"; 86a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 87a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden} 88a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 89a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFaddenclass Sub extends Base { 90a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden private static final long serialVersionUID = 54321; 91a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 92a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Double four; 93a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Float five; 94a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden private Byte six = 26; 95a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Character seven = '7'; 96a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden Short eight; 97a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden long nine; 98a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden public Character thing; 99a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 100a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden public Sub(char thing) { 101a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden four = 4.0; 102a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden five = 5.0f; 103a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden six = 6; 104a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden eight = 8; 105a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden nine = 9; 106a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden this.thing = thing; 107a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 108a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 109a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden public void check() { 110a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden System.out.println("one=" + one + " two=" + two + " three=" + three 111a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden + " four=" + four + " five=" + five + " six=" + six 112a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden + " seven=" + seven + " eight=" + eight + " nine=" + nine 113a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden + " thing=" + thing); 114a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden } 115a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden} 116a5a184892e60a89b564ca7c74e50b2ecb27d9f80Andy McFadden 117