我想做一个服务端和客户端通信的功能。
客户端可以发送各种文件以及文字信息,由服务端接收并且解析出来。
我觉得过程应该是这边打包成字节流的形式,然后发送,然后接收的吧?
那文件和信息怎么打包成字节流形式呢?
求教。

解决方案 »

  1.   

    借用人家的一个例子吧: public static void main(String args[]) throws Exception
        {
            Map map = new HashMap();
            map.put("a", "a");
            map.put("b", "b");
            map.put("c", "c");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(baos);
            out.writeObject(map);
            out.close();
            System.out.println(baos.toByteArray());
            ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
            Map map2 = (Map)in.readObject();
            System.out.println(map2);
        }
    以及转化list对象:public byte[] getByte(List<Object> list) {
    byte[] buf = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 构造一个字节输出流
    ObjectOutputStream oos;
    try {
    oos = new ObjectOutputStream(baos); // 构造一个类输出流
    oos.writeObject(list); // 写这个对象
    buf = baos.toByteArray(); // 从这个地层字节流中把传输的数组给一个新的数组
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return buf;
    } public List<Object> getObject(byte[] b) {
    List<Object> list=null;
    // 构建一个类输入流,地层用字节输入流实现
    try {
    ByteArrayInputStream bais = new ByteArrayInputStream(b);
    ObjectInputStream ois;
    ois = new ObjectInputStream(bais);
    list =(List<Object>) ois.readObject();
    // ArrayList str = (ArrayList) ois.readObject(); //读取类
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return list;
    }
      

  2.   

    不知道楼主强调的是‘打包’还是‘要用字节传送’。
    似乎所有最基本的IO操作实现的 读 或 写 默认就是操作字节的!如果你只是强调发送字节,就用Inputstream的read,write就行了。
    如果是强调要‘打包’再发送,就先打包再发送喽。打包的工具JAVA中有现成的!收到之后要解包(一般就是压缩和解压缩了)。
    一楼给的代码是序列化的读写操作,不知道是不是楼主想要的。