java 在socket 中传递整个实例;把各种数据打包同时写入文件,如数组,列表,集合,Map等等一切

该文章演示了如何在Java中使用对象序列化通过Socket进行数据传输,以及将数据写入文件和从文件读取。类必须实现Serializable接口以确保可序列化。示例展示了服务器接受客户端发送的类实例,并打印其属性,以及读写文件的过程。
摘要由CSDN通过智能技术生成

服务器:

这样就可以传递整个数据结构。如果有很多类型的数据要传递,就可以用类把它们打包在一起,同时传递。

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public  class Khd3{
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        ServerSocket serverSocket=new ServerSocket(3000);
        Socket socket=serverSocket.accept();
        InputStream inputStream=socket.getInputStream();
        ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
        T t= (T) objectInputStream.readObject();
        System.out.println(t.name);
        System.out.println(t.age);
    }
}

客户端:

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.Socket;
public class Test1{
    public static  void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",3000);
        OutputStream outputStream=socket.getOutputStream();
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);

        T t=new T("w",20);                    //初始化 自定义类Test1
       objectOutputStream.writeObject(t);     // 可以在socket中传递整个类的实例内容。
       objectOutputStream.flush();
       socket.close();
    }
}
class T implements Serializable {        //必须要实现 Serializable,否则要报错。非常重要
    String name;
    int age;

   T(String name,int age) {
       this.name=name;
       this.age=age;
   }
}

把多个类型的数据打包写入文件中,这种文件有点像数据库的味道。准备用这个方法写个数据库

写文件:

package org.example;
import java.io.*;
import java.net.Socket;
public class Khd1{
    public static  void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream=new FileOutputStream("/home/wzpc/1.txt");
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);

        T t=new T("w",20);                    //初始化 自定义类T
        objectOutputStream.writeObject(t);     // 可以在socket中传递整个类的实例内容。
        objectOutputStream.flush();
        T t1=new T("ww",200);                    //初始化 自定义类T
        objectOutputStream.writeObject(t1);     // 可以在socket中传递整个类的实例内容。
        objectOutputStream.flush();
    }
}
class T implements Serializable {        //必须要实现 Serializable接口    。非常重要
    String name;
    int age;

    T(String name,int age) {
        this.name=name;
        this.age=age;
    }
}

读文件

package org.example;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public  class AppTest{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        FileInputStream fileInputStream=new FileInputStream("/home/wzpc/1.txt");
        ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
        T t= (T) objectInputStream.readObject();
        System.out.println(t.name);
        System.out.println(t.age);
        T t1= (T) objectInputStream.readObject();
        System.out.println(t1.name);
        System.out.println(t1.age);
    }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值