除了RMI,没别的方法了?
BTW:我只是想做一个小程序而已,RMI方面的内容一点都不会!
BTW:我只是想做一个小程序而已,RMI方面的内容一点都不会!
解决方案 »
- jtextpane 怎么实现动态给文本中字体着色
- Process p=Runtime.getRuntime().exec("");语句
- jbuilder中编译一个带命令行参数的程序。但命令行要在哪里输入呀
- 哪位高人有核心技术电子版
- 用java怎么得到数据库中的所有库?!!分不够再加!!
- 字符输入流:抛出异常“找不到指定文件”,但是文件地址没有错误,请高人指点 谢谢
- 终于找到彻底干掉3721的方法,被此病毒困扰的人来顶一下!
- 小弟请教一个panel的问题,恳请大家帮帮我
- 谁有java 做的软件啊,给我一个看看,我真的不知道java 能编出什么样的程序呀
- 线程死锁问题
- Linux下怎么运行Jsp文件?
- 关于Runtime问题?
对象的序列化处理非常简单,只需对象实现了Serializable接口即可(该接口仅是一个标记,没有方法)。在Java 1.1中,许多标准库类都发生了改变,以便能够序列化——其中包括用于基本数据类型的全部封装器、所有集合类以及其他许多东西。甚至Class对象也可以序列化(第11章讲述了具体实现过程)。
为序列化一个对象,首先要创建某些OutputStream对象,然后将其封装到ObjectOutputStream对象内。此时,只需调用writeObject()即可完成对象的序列化,并将其发送给OutputStream。相反的过程是将一个InputStream封装到ObjectInputStream内,然后调用readObject()。和往常一样,我们最后获得的是指向一个上溯造型Object的句柄,所以必须下溯造型,以便能够直接设置。
// Demonstrates object serialization in Java 1.1
import java.io.*;class Data implements Serializable {
private int i;
Data(int x) { i = x; }
public String toString() {
return Integer.toString(i);
}
}public class Worm implements Serializable {
// Generate a random int value:
private static int r() {
return (int)(Math.random() * 10);
}
private Data[] d = {
new Data(r()), new Data(r()), new Data(r())
};
private Worm next;
private char c;
// Value of i == number of segments
Worm(int i, char x) {
System.out.println(" Worm constructor: " + i);
c = x;
if(--i > 0)
next = new Worm(i, (char)(x + 1));
}
Worm() {
System.out.println("Default constructor");
}
public String toString() {
String s = ":" + c + "(";
for(int i = 0; i < d.length; i++)
s += d[i].toString();
s += ")";
if(next != null)
s += next.toString();
return s;
}
public static void main(String[] args) {
Worm w = new Worm(6, 'a');
System.out.println("w = " + w);
try {
ObjectOutputStream out =
new ObjectOutputStream(
new FileOutputStream("worm.out"));
out.writeObject("Worm storage");
out.writeObject(w);
out.close(); // Also flushes output
ObjectInputStream in =
new ObjectInputStream(
new FileInputStream("worm.out"));
String s = (String)in.readObject();
Worm w2 = (Worm)in.readObject();
System.out.println(s + ", w2 = " + w2);
} catch(Exception e) {
e.printStackTrace();
}
try {
ByteArrayOutputStream bout =
new ByteArrayOutputStream();
ObjectOutputStream out =
new ObjectOutputStream(bout);
out.writeObject("Worm storage");
out.writeObject(w);
out.flush();
ObjectInputStream in =
new ObjectInputStream(
new ByteArrayInputStream(
bout.toByteArray()));
String s = (String)in.readObject();
Worm w3 = (Worm)in.readObject();
System.out.println(s + ", w3 = " + w3);
} catch(Exception e) {
e.printStackTrace();
}
}
} ///:~
boolean connectToServer()
{
ConnectionData.server = jtxtServerIP.getText().toString().trim();
try
{
ConnectionData.serport = Integer.parseInt(jtxtServerPort.getText().trim());
ConnectionData.socket = new Socket(InetAddress.getByName(ConnectionData.server),
ConnectionData.serport); ConnectionData.in = new ObjectInputStream(ConnectionData.socket.getInputStream());
ConnectionData.out = new ObjectOutputStream(ConnectionData.socket.getOutputStream());
} catch(NumberFormatException e) // 端口有误
{
JOptionPane.showMessageDialog(this,"请填写一个1--65536的端口!","确定",
JOptionPane.ERROR_MESSAGE);
return false;
} catch(IOException e) // 连接服务器有误
{
try
{
ConnectionData.socket.close();
} catch(IOException e2) {}
JOptionPane.showMessageDialog(this,"不能与服务器建立连接!","确定",
JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
}上述程序段编译时没有错,但一运行到
ConnectionData.in = new ObjectInputStream(ConnectionData.socket.getInputStream());
句时,程序就运行不下去了,并且没有抛出异常,请问这是为什么?其中ConnectionData如下:package client;import java.io.*;
import java.net.*;
class ConnectionData
{
static String server; //Server name
static int serport; //Port
static Socket socket; //Socket
static ObjectInputStream in; //ObjectInputStream
static ObjectOutputStream out; //ObjectOutputStream
public ConnectionData()
{
}
}