如果通过流把文件和信息压缩成字节流并发送? 我想做一个服务端和客户端通信的功能。客户端可以发送各种文件以及文字信息,由服务端接收并且解析出来。我觉得过程应该是这边打包成字节流的形式,然后发送,然后接收的吧?那文件和信息怎么打包成字节流形式呢?求教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 借用人家的一个例子吧: 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; } 不知道楼主强调的是‘打包’还是‘要用字节传送’。似乎所有最基本的IO操作实现的 读 或 写 默认就是操作字节的!如果你只是强调发送字节,就用Inputstream的read,write就行了。如果是强调要‘打包’再发送,就先打包再发送喽。打包的工具JAVA中有现成的!收到之后要解包(一般就是压缩和解压缩了)。一楼给的代码是序列化的读写操作,不知道是不是楼主想要的。 怎样将一个数组原样输出 关于 URL 面试编程题 那刚走出校门的毕业生最起码会写什么东东啊 简单问题,加散分! applet与servlet通信时,中文的返回问题 不理解!!! 高分求一界面--在线等 急问高手:关于字符串的数据类型转换!!! 急!!急!!简单问题 java正则的问题 JVM加载class的机制?
{
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;
}
似乎所有最基本的IO操作实现的 读 或 写 默认就是操作字节的!如果你只是强调发送字节,就用Inputstream的read,write就行了。
如果是强调要‘打包’再发送,就先打包再发送喽。打包的工具JAVA中有现成的!收到之后要解包(一般就是压缩和解压缩了)。
一楼给的代码是序列化的读写操作,不知道是不是楼主想要的。