⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serializationcompatibility.java

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 JAVA
字号:
/* * Test the compatiblity of various serialized objects against other VMs. * When run in the Kaffe regression suite, just test that serialize/deserialize * of various types is working.  Can be used to generate output on one * VM and read it in on another. * * Copyright (c) 2002, 2003 Pat Tullmann * All Rights Reserved. * * This file is released into the public domain. * * @author Pat Tullmann <pat_kaffe@tullmann.org> */import java.io.*;import java.util.*;import java.math.*;public class SerializationCompatibility{	static final String FILENAME = "serializedFoos.bin";	static class ObjectCount	implements Serializable	{		int objectCount;		long secondField;				ObjectCount(int ct)		{			this.objectCount = ct;			this.secondField = 0xBabeBabeBabeBabeL;		}		public String toString()		{			return "ObjectCount(" +this.objectCount+ ")";		}		public boolean equals(Object x)		{			if (x instanceof ObjectCount)			{				ObjectCount other = (ObjectCount)x;				return (other.objectCount == this.objectCount)					&& (other.secondField == this.secondField);			}			return false;		}	}	static class DefaultPutFields	implements Serializable	{		private int x = 11;		private int y = 12;		public String toString()		{			return (this.getClass().getName() + ": " +x+ "," +y);		}		private void writeObject(ObjectOutputStream stream) 			throws IOException, ClassNotFoundException		{			this.x = 32;			this.y = 99;			ObjectOutputStream.PutField pf = stream.putFields();			pf.put("x", 49);			stream.writeFields();		}		private void readObject(ObjectInputStream stream) 			throws IOException, ClassNotFoundException		{			stream.defaultReadObject();		}	}	private static class GetTypeMismatch // object typemismatch in get	implements Serializable	{		private Integer x = new Integer(17);		private Integer y = new Integer(27);		public String toString()		{			return (this.getClass().getName() + ": " +x+ "," +y);		}		private void writeObject(ObjectOutputStream stream) 			throws IOException, ClassNotFoundException		{			ObjectOutputStream.PutField pf1 = stream.putFields();			pf1.put("x", this.x);			pf1.put("y", this.y);			stream.writeFields();		}		private void readObject(ObjectInputStream stream) 			throws IOException, ClassNotFoundException		{			ObjectInputStream.GetField gf1 = stream.readFields();			this.x = (Integer)gf1.get("x", new String("Missed X?"));			this.y = (Integer)gf1.get("y", new String("Missed Y?"));		}	}	private static class PutTypeMismatch // object typemismatch in put	implements Serializable	{		private Integer x = new Integer(11);		private Integer y = new Integer(32);		public String toString()		{			return (this.getClass().getName() + ": " +x+ "," +y);		}		private void writeObject(ObjectOutputStream stream) 			throws IOException, ClassNotFoundException		{			ObjectOutputStream.PutField pf1 = stream.putFields();			pf1.put("x", new String("whax?"));			pf1.put("y", new String("whay?"));			stream.writeFields();		}		private void readObject(ObjectInputStream stream) 			throws IOException, ClassNotFoundException		{			ObjectInputStream.GetField gf1 = stream.readFields();			gf1.get("x", new String("missedx."));			gf1.get("y", new String("missedy"));		}	}	static String testString(final int id)	{		// XXX include some non-ASCII chars		return "This is a long, but not that compilcated test string for Serialization: " +id;	}	static Hashtable testHashtable(final int id)	{		Hashtable htab = new Hashtable();		for (int i = 0; i < 25 + id; i++)		{			htab.put("" +i+ "", new Integer(i));		}		return htab;	}	static HashMap testHashMap(final int id)	{		HashMap h = new HashMap();		for (int i = 0; i < 25 + id; i++)		{			h.put("" +i+ "", new Integer(i));		}		return h;	}	static BigInteger testBigInt(int id)	{		return new BigInteger("1010101010101101010101010102102102013103913019301210" + id);	}	static void checkFile(String filename)		throws IOException, ClassNotFoundException, Error	{		FileInputStream fis = new FileInputStream (filename);		ObjectInputStream ois = new ObjectInputStream (fis);		try		{			checkStream(ois);		}		catch (java.io.EOFException eofe)		{			// okay		}	}		private static void check(Object fromStream, Object expected)		throws Error	{		if (fromStream.equals(expected))			return;				msg("Error: Got object: " +fromStream);		msg("  but expected: " +expected);		throw new Error("check failed");	}	private static void checkStream(ObjectInputStream ois)		throws IOException, ClassNotFoundException, Error	{		int objCt = 0;				while (true)		{			Object o = ois.readObject();			if (o == null)			{				msg("End of stream.");				ois.close();				return;			}			msg("Read object " +objCt+ ":" +o);			if (o instanceof String)				check(o, testString(objCt));			else if (o instanceof BigInteger)				check(o, testBigInt(objCt));			else if (o instanceof Hashtable)				check(o, testHashtable(objCt));			else if (o instanceof HashMap)				check(o, testHashMap(objCt));			else if (o instanceof ObjectCount)				check(o, new ObjectCount(objCt));			else if (o instanceof DefaultPutFields)				System.out.println(o);			else if (o instanceof GetTypeMismatch)				System.out.println(o);			else if (o instanceof PutTypeMismatch)				System.out.println(o);			else			{				throw new Error("Unexpected object: " +o);			}			objCt++;		}	}	private static void doWrite(ObjectOutputStream oos, Object o)		throws IOException	{		oos.writeObject(o);		msg("Wrote object: " +o+ "  (osc = " +ObjectStreamClass.lookup(o.getClass())+ ")");	}	private static void generateTests(String filename)		throws IOException	{		FileOutputStream fos = new FileOutputStream (filename);		ObjectOutputStream oos = new ObjectOutputStream (fos);		int objCt = 0;		for (int i = 0; i < 120; i++)		{			int objType = (i % 9); // XXX randomly select.			switch (objType)			{			case 0: doWrite(oos, testBigInt(objCt));				break;			case 1: doWrite(oos, new ObjectCount(objCt)); 				break;			case 2: doWrite(oos, testString(objCt));				break;			case 3: doWrite(oos, testHashtable(objCt));				break;			case 4: doWrite(oos, testHashMap(objCt));				break;			case 5: doWrite(oos, new ObjectCount(objCt));				break;			case 6: doWrite(oos, new DefaultPutFields());				break;			case 7: doWrite(oos, new GetTypeMismatch());				break;			case 8: doWrite(oos, new PutTypeMismatch());				break;			}			objCt++;		}		oos.flush();		oos.close();	}	private static final void msg(String m)	{		System.out.println(m);	}	public static void main(String[] args)		throws IOException, ClassNotFoundException	{		/*		 * No args == run write/read test to default file		 * 1 arg == write to given file		 * 2 args == "read" <file>		 */		if (args.length == 0)		{			generateTests(FILENAME);			System.out.println();			checkFile(FILENAME);			new File(FILENAME).delete();		}		else if (args.length == 1)		{			generateTests(args[0]);		}		else if (args.length == 2)		{			checkFile(args[1]);		}		else		{			System.err.println("Usage:");			System.err.println("  SerializationCompatibility: do write/read test with default file");			System.err.println("  SerializationCompatibility <filename>: do write test to given file");			System.err.println("  SerializationCompatibility read <filename>: do read test from given file");			System.exit(1);		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -