socket直接通信,采用writeObject方法进行。
服务器端代码
public void run() {
while (isRunning) {
System.out.println("connect is running");
try {
socket = sSocket.accept();
System.out.println("connect is ok");
oos = new ObjectOutputStream(socket.getOutputStream());
// oos.writeObject(new Integer(1));
while(true){
int size = (list.size()> 10) ? 10 : list.size();
for (int i = 0; i < size; i++) {
Result result = (Result) list.remove(size);
// System.out.println("result: " + result);
oos.writeObject(result);
// System.out.println("发送一个对象成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端:
class ReadResult extends Thread {
private String ip = "localhost";
private int port = 8889;
Socket socket = null;
private boolean isRunning = true;
BufferedReader reader = null;
public ReadResult() {
try {
socket = new Socket(ip, port);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void run() {
ObjectInputStream ois = null;
try {
System.out.println("chatclient test!");
ois = new ObjectInputStream(socket.getInputStream());
while(true){
Result result = (Result) ois.readObject();
System.out.println("name: " + result.getName());
System.out.println("website: " + result.getWebsite());
// System.out.println("list size : " + resultsList.size());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Object对象类
public class Result implements Serializable{
String id;
String name;
String content;
String website;
public Result(String id, String name, String content, String website) {
// TODO Auto-generated constructor stub
this.id = id;
this.name = name;
this.content = content;
this.website = website;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
}
分享到:
相关推荐
采用对象序列化的 writeObject 方法把选课结果存到硬盘文件系统中; 2.采用对象序列化的 readObject 方法从文件中恢复对象,并操作学生的选课课表,实现退课操作。 3.打印课程对象信息,采用覆盖定义 toString()...
总结来说,Java中实现List的深度复制,可以采用序列化和反序列化的方法,或者手动复制每个元素。选择哪种方法取决于你的具体需求,例如对象是否支持序列化,以及性能和代码复杂性的考量。在处理可变对象时,确保深...
- **实现`Serializable`接口并自定义序列化方法**:如果`Customer`类实现了`Serializable`接口,并定义了`writeObject`和`readObject`方法,那么序列化和反序列化操作将按照自定义的方法进行。 ```java public ...
接着,创建一个 `MemoryStream` 对象,`WriteObject` 方法将对象写入内存流,然后将内存流中的数据转换为UTF-8编码的字符串,最后关闭内存流并返回JSON字符串。 2. **JSON反序列化**: - `JsonDeserialize<T>` ...
- **写入文件**:`addFile()`方法使用`ObjectOutputStream`来创建一个`FileOutputStream`对象,通过`writeObject()`方法将`ArrayList`中的`Student`对象写入名为"student.txt"的文件中。最后,写入`null`作为文件的...
- `writeObject`和`readObject`方法用于序列化和反序列化对象时保存和恢复对象状态。 - 使用`synchronized`关键字确保对`borrowBook()`和`returnBook()`方法的访问是线程安全的,防止并发问题。 - `borrowBook()`...
它提供了`writeObject()`和`writeArray()`方法,帮助我们将Java对象转换成JSON格式的字符串。 5. **JSONValue**:这是所有JSON值的基类,可以表示JSON中的任何数据类型,包括JSON对象、数组、布尔值、数字、字符串...
为了更加精细地控制序列化过程,可以覆盖`writeObject()`和`readObject()`方法。这两个方法允许开发人员自定义序列化和反序列化的逻辑。 ```java private void writeObject(ObjectOutputStream out) throws ...
2. **序列化对象**:通过调用`ObjectOutputStream`的`writeObject()`方法将传入的对象序列化,并存储到`ByteArrayOutputStream`中。 3. **创建输入流**:使用`ByteArrayOutputStream`中的字节数组创建`...
首先创建了一个`DataContractJsonSerializer`实例,然后使用`WriteObject`方法将对象写入内存流中,最后将内存流中的数据转换为UTF-8编码的字符串。 ##### 反序列化(Deserialization) 反序列化是序列化的逆过程...
13. **JAVA实现排序和序列化**:实现`Comparable`或`Comparator`接口进行比较,序列化可以采用上述的实现`Serializable`接口方法。 14. **在COLLECTION框架中,实现比较要实现的接口**:`java.util.Comparator`接口...
实现排序可以通过自定义`Comparator`接口,序列化可以使用`writeObject()`和`readObject()`方法。 14. `COLLECTION`框架中的比较: 要实现`Comparable`接口或使用`Comparator`接口。 15. 插入排序代码: 插入...
- **实现 `writeObject()` 和 `readObject()` 方法**:可以通过实现这两个方法来自定义序列化和反序列化的逻辑。 #### 3.2 类加载机制 序列化过程中,涉及到的对象可能需要通过类加载器动态加载。Java的类加载机制...
通过`ObjectOutputStream`类的`writeObject()`方法,可以将对象写入到文件中;而通过`ObjectInputStream`的`readObject()`方法,可以从文件中读取并恢复对象。这样,即使系统重启,之前保存的学生信息也能被正确地...
它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。 java.io.ObjectInputStream:表示对象输入流;它的readObject()方法源输入流中读取字节序列,再把...
39. Java序列化:实现`Serializable`接口,`writeObject()`和`readObject()`方法。 40. 不能从`static`方法中调用非`static`方法。 41. `clone()`方法中通常会调用`super.clone()`。 42. 异常处理的关键字:`try`...
`readObject()`和`writeObject()`用于读写对象,这使得你可以直接在网络连接上操作Java对象,无需关心底层的字节流。 5. **对象注册与ID** 每个被序列化的类都有一个唯一的ID,可以通过`Kryo.register()`手动指定...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...
本项目采用了DAO(Data Access Object)模式,将数据访问逻辑封装在单独的类中。这样做可以带来以下好处: - **解耦**:通过将数据访问逻辑与其他业务逻辑分离,使得系统更易于维护和扩展。 - **重用**:DAO层的...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...