Object,byte[],ByteBuffer之间的转换。
2010-03-05 16:55
316 查看
新版本
老版本
package cn.vicky.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteBuffer;
import org.apache.mina.core.buffer.IoBuffer;
/**
* 对象序列化,反序列化(序列化对象转byte[],ByteBuffer, byte[]转object
*
* @author Vicky
* @email eclipser@163.com
*/
public class ByteUtil {
public static byte[] getBytes(Object obj) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(obj);
out.flush();
byte[] bytes = bout.toByteArray();
bout.close();
out.close();
return bytes;
}
public static Object getObject(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi);
Object obj = oi.readObject();
bi.close();
oi.close();
return obj;
}
public static Object getObject(ByteBuffer byteBuffer) throws ClassNotFoundException, IOException {
// 需要mina框架的IoBuffer
IoBuffer buffer = IoBuffer.allocate(byteBuffer.capacity()).setAutoExpand(true); // 自动展开
for (int i = 0; i < byteBuffer.capacity(); i++) {
byteBuffer.position(i);
buffer.put(byteBuffer.get());
}
buffer.position(0);
InputStream input = buffer.asInputStream();
ObjectInputStream oi = new ObjectInputStream(input);
Object obj = oi.readObject();
input.close();
oi.close();
return obj;
}
public static ByteBuffer getByteBuffer(Object obj) throws IOException {
byte[] bytes = ByteUtil.getBytes(obj);
ByteBuffer buff = ByteBuffer.wrap(bytes);
return buff;
}
}
以上实现了Java之间的转换,关于Java与ActionScript之间的数据传输与转换。主要思想同上暂时不予讨论。。。
package cn.vicky.chapt13; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.nio.ByteBuffer; import java.nio.charset.Charset; /** * 对象序列化,反序列化(序列化对象转byte[],ByteBuffer, byte[]转object * * @author Vicky * @email eclipser@163.com */ public class ByteUtil { public static byte[] getBytes(Serializable obj) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout); out.writeObject(obj); out.flush(); byte[] bytes = bout.toByteArray(); bout.close(); out.close(); return bytes; } public static int sizeof(Serializable obj) throws IOException { return getBytes(obj).length; } public static Object getObject(byte[] bytes) throws IOException, ClassNotFoundException { ByteArrayInputStream bi = new ByteArrayInputStream(bytes); ObjectInputStream oi = new ObjectInputStream(bi); Object obj = oi.readObject(); bi.close(); oi.close(); return obj; } public static Object getObject(ByteBuffer byteBuffer) throws ClassNotFoundException, IOException { InputStream input = new ByteArrayInputStream(byteBuffer.array()); ObjectInputStream oi = new ObjectInputStream(input); Object obj = oi.readObject(); input.close(); oi.close(); byteBuffer.clear(); return obj; } public static ByteBuffer getByteBuffer(Serializable obj) throws IOException { byte[] bytes = ByteUtil.getBytes(obj); ByteBuffer buff = ByteBuffer.wrap(bytes); return buff; } public static void main(String[] args) throws IOException, ClassNotFoundException { System.out.println(ByteUtil.sizeof(new Player1())); System.out.println(ByteUtil.sizeof(new Player2())); System.out.println(ByteUtil.sizeof(new Player3())); System.out.println(ByteUtil.sizeof(new Player4())); System.out.println(ByteUtil.sizeof(new Player5())); System.out.println("---------"); Player5 p5 = new Player5(); System.out.println(ByteUtil.sizeof(p5)); p5.id1 = 100000; p5.id2 = 200000; System.out.println(ByteUtil.sizeof(p5)); p5.name = "ooxx"; System.out.println(ByteUtil.sizeof(p5)); p5.name = "ooxxooxx"; System.out.println(ByteUtil.sizeof(p5)); System.out.println("---------"); byte[] bytes = ByteUtil.getBytes(p5); Player5 p5_2 = (Player5) ByteUtil.getObject(bytes); System.out.println(p5_2.id1); System.out.println(p5_2.id2); System.out.println(p5_2.name); System.out.println("---------"); System.out.println(ByteUtil.sizeof(new Player6())); Player6 p6 = new Player6(); System.out.println(ByteUtil.sizeof(p6)); p6.id1 = 100000; p6.id2 = 200000; System.out.println(ByteUtil.sizeof(p6)); p6.setName("Vicky"); System.out.println(ByteUtil.sizeof(p6)); p6.setName("中文名称"); System.out.println(ByteUtil.sizeof(p6)); bytes = ByteUtil.getBytes(p6); Player6 p6_2 = (Player6) ByteUtil.getObject(bytes); System.out.println(p6_2.id1); System.out.println(p6_2.id2); System.out.println(p6_2.getName()); } } class Player1 implements Serializable { int id1; } class Player2 extends Player1 { int id2; } class Player3 implements Serializable { int id1; int id2; } class Player4 extends Player3 { String name; } class Player5 implements Serializable { int id1; int id2; String name; } class Player6 implements Serializable { final static Charset chrarSet = Charset.forName("UTF-8"); int id1; int id2; private byte[] name = new byte[20]; public String getName() { return new String(name, chrarSet); } public void setName(String name) { this.name = name.getBytes(chrarSet); } // public void setName(String name) { // byte[] tmpBytes = name.getBytes(chrarSet); // for (int i = 0; i < tmpBytes.length; i++) { // this.name[i] = tmpBytes[i]; // } // } }
老版本
package cn.vicky.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteBuffer;
import org.apache.mina.core.buffer.IoBuffer;
/**
* 对象序列化,反序列化(序列化对象转byte[],ByteBuffer, byte[]转object
*
* @author Vicky
* @email eclipser@163.com
*/
public class ByteUtil {
public static byte[] getBytes(Object obj) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(obj);
out.flush();
byte[] bytes = bout.toByteArray();
bout.close();
out.close();
return bytes;
}
public static Object getObject(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi);
Object obj = oi.readObject();
bi.close();
oi.close();
return obj;
}
public static Object getObject(ByteBuffer byteBuffer) throws ClassNotFoundException, IOException {
// 需要mina框架的IoBuffer
IoBuffer buffer = IoBuffer.allocate(byteBuffer.capacity()).setAutoExpand(true); // 自动展开
for (int i = 0; i < byteBuffer.capacity(); i++) {
byteBuffer.position(i);
buffer.put(byteBuffer.get());
}
buffer.position(0);
InputStream input = buffer.asInputStream();
ObjectInputStream oi = new ObjectInputStream(input);
Object obj = oi.readObject();
input.close();
oi.close();
return obj;
}
public static ByteBuffer getByteBuffer(Object obj) throws IOException {
byte[] bytes = ByteUtil.getBytes(obj);
ByteBuffer buff = ByteBuffer.wrap(bytes);
return buff;
}
}
以上实现了Java之间的转换,关于Java与ActionScript之间的数据传输与转换。主要思想同上暂时不予讨论。。。
相关文章推荐
- Object,byte[],ByteBuffer之间的转换
- Object,byte[],ByteBuffer之间的转换
- C# Stream 和 byte[] 之间的转换
- C# Stream 和 byte[] 之间的转换
- Drawable、Bitmap、byte[]之间的转换
- java中字符窜与16进制,byte之间的转换
- object-c NSString / NSData / char* 类型之间的转换
- C#中byte数组与结构体之间的转换
- Java File和byte数据之间的转换
- android Bitmap与Drawable与byte[]与InputStream之间的转换工具类
- byte[]数组和int 之间的转换
- CString与Byte及char之间的转换
- Java 中 byte、byte 数组和 int、long 之间的转换
- Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
- <转载>byte[]、bitmap和stream之间的转换
- string与byte[]之间的转换
- CMSampleBufferRef与byte*互相转换
- c#结构体和byte[]之间的转换
- short,int,long,double,string,float与byte数组之间的转换
- 类名和Class和Object三者之间的转换