[jdk文档]
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
[jdk文档]
从上面可以看到是对基本数据类型序列化和反序列化,String及数组等不是基本数据类型
[jdk文档]
在 Java 中,字符串和数组都是对象,所以在序列化期间将其视为对象。读取时,需要将其强制转换为期望的类型。
readObject 方法负责使用通过对应的 writeObject 方法写入流的数据,为特定类读取和恢复对象的状态。该方法本身的状态,不管是属于其超类还是属于其子类,都没有关系。恢复状态的方法是,从个别字段的 ObjectInputStream 读取数据并将其分配给对象的适当字段。DataInput 支持读取基本数据类型。
尝试读取由对应的 writeObject 方法写入的超出自定义数据边界的对象数据将导致抛出 OptionalDataException(eof 字段值为 true)。超出已分配数据末尾的非对象读取以指示流末尾的方式反映数据结束:按位读取与字节读取或字节数读取一样,将返回 -1,基元读取将抛出 EOFException。
[jdk文档]
读取对象类似于运行新对象的构造方法。为对象分配内存并将其初始化为零 (NULL)。为不可序列化类调用无参数构造方法,然后从以最接近 java.lang.object 的可序列化类开始和以对象的最特定类结束的流恢复可序列化类的字段。
从上面看,反序列化时读出的数据皆为基本数据类型,然后可能要自己重新组合成为你要的MyObject类型,如
String name = (String)ois.readObject()
int age = (int)ois.readInt()
MyObject mo = new MyObject()
mo.setName(name)
mo.setAge(age)
我的理解不知道对不对
监听你系统通信所用的端口,有数据就获取显示就可以了。例如你的服务器ip是168.12.1.16,使用的是2000端口号,Socket socket=new Socket("168.12.1.16",2000)DataOutputStream in=new DataOutputStream(socket.getInputStream())
String command = new Scanner(System.in).nextLine()Process process = new Runtime.getRuntime().exec(command)// command为unix命令,如"ls"等
BufferedReader results = new BufferedReader(new InputStreamReader(process.getInputStream()))
String s
while((s = results.readLine()) != null) {
System.out.println(s)
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)