ObjectOutputStream 必顺用到参数FileOutputStream 吗,有没有把一个对象序列化到一个字符串中的啊
FileOutputStream 是生成一个文件,不能成为字符串。
FileOutputStream 是生成一个文件,不能成为字符串。
解决方案 »
- 想问下大家对GlassFish与Tomcat的看法
- 安装jbuilder注册出错?-高人指点
- java基础问题!!!!!!
- applet ie6下正常加载,ie8下只显示一个分号.
- CORBA是基于组件的开发技术吗?
- ejb跨机器远程调用出错
- JAVA Application 怎么调用其他程序写的.DLL动态连接库????
- 请教有关Applet问题
- 求助,用java读入图片,转换成黑白,在图片中放入密码,转换成其它模糊图片,再把图像模糊处理.
- 部署CMP时的错误
- 这个schema怎么写?
- 一个服务返回一个ArrayList,如何使用Axis序列化/反序列化把它封装到一个Soap中去,以便可以在网上传送!
我想要达到的目的是把一个对象序列化之后放入一个soap消息中去。
而org.apache.axis.encoding.SerializationContext的write方法只能放String 类型的值,
所以我只有把一个对象序列化成String了,有什么好的方法吗?
反序列化是用ObjectInputStream好像不能用ByteArrayOutputStream这个参数啊!它报错啊
用ObjectInputStream来封装一下ByteArrayInputStream就可以了
代码如下 :
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.*;public class MyXmlSerializer implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private static void myXmlSerializer()
{
ArrayList<String> myAL=new ArrayList<String>();
myAL.add("aaaaaa!");
System.out.println("我的ArrayList: "+myAL.get(0));
//序列化使用的输出流
ObjectOutputStream OOS=null;
//序列化后数据流给ByteArrayOutputStream 来保存。
//ByteArrayOutputStream 可转成字符串或字节数组
ByteArrayOutputStream BAOS=new ByteArrayOutputStream();
//ByteArrayInputStream 可接收一个字节数组"byte[]"。供反序列化做参数
ByteArrayInputStream BAIS=null;
//反序列化使用的输入流
ObjectInputStream OIS=null;
try {
//byte[] myb="s";
OOS=new ObjectOutputStream(BAOS);
OOS.writeObject(myAL);
byte[] abc=BAOS.toByteArray();
System.out.println(abc);
String StrMySerializer=abc.toString();
System.out.println("序列化: "+StrMySerializer);
OOS.close();
byte[]ddd=StrMySerializer.getBytes();
System.out.println(ddd);
BAIS=new ByteArrayInputStream(abc);
OIS=new ObjectInputStream(BAIS);
ArrayList c=(ArrayList)(OIS.readObject());
System.out.println("反序列化: "+c.get(0));
OIS.close();
}
catch (IOException e) {e.printStackTrace();}
catch (Exception ex) {System.out.println("序列化时产生错误");}
}
public static void main(String[] args){
myXmlSerializer();
}
}
这一版没有把它写成服务\客户端的形式package com;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.*;public class ArrayListSerializ implements Serializable{
/**
* 此例是一个序列化/反序列化的方法 :
*
* 主要思想是把一个对象写入对象输出流,然后把这个流里面的数据导入字节数组输出流
* 再把字节数组输出流导入到字节数组。这时,由于byte[]数组是从ObjectOutputStream之后得来的,
* 那么是不可以new String(buff)的,因为其中包含了不可见字符,根本不是一个字符串。
* 只能用sun.misc.BASE64Encoder把它翻译成字符串形式。
* 至此,这就完成了序列化成字符串行式的过程
*
* 再通过sun.misc.BASE64Decoder().decodeBuffer把字符串转换成一个byte[],
* 然后通过其反思路完成反序列化过程
*/
private static final long serialVersionUID = 1L;
private static void myArrayListSerializer()
{
ArrayList<String> myAL=new ArrayList<String>();
myAL.add("This is a serial programme.author: 张正明");
System.out.println("ArrayList's content: "+myAL.get(0));
//序列化使用的输出流
ObjectOutputStream OOS=null;
//序列化后数据流给ByteArrayOutputStream 来保存。
//ByteArrayOutputStream 可转成字符串或字节数组
ByteArrayOutputStream BAOS=new ByteArrayOutputStream();
//ByteArrayInputStream 可接收一个字节数组"byte[]"。供反序列化做参数
ByteArrayInputStream BAIS=null;
//反序列化使用的输入流
ObjectInputStream OIS=null;
try {
OOS=new ObjectOutputStream(BAOS);
OOS.writeObject(myAL);
byte[] buff=BAOS.toByteArray();
/*由于byte[]数组是从ObjectOutputStream之后得来的,
*那么是不可以new String(buff)的,因为其中包含了不可见字符,根本不是一个字符串
*/
System.out.println("序列化成一个byte[]的字符串形式 :"+buff);
//转换成字符串
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String Sstr = encoder.encode(buff);
System.out.println("序列化成一个字符串:"+Sstr);
System.out.println("检查序列化成一个字符串和序列化成一个byte[]是否为同一个内容:"+
Arrays.equals(buff, new sun.misc.BASE64Decoder().decodeBuffer(Sstr)));
OOS.close();
// 把字符串转成一个byte[]
byte[] DSbuff=new sun.misc.BASE64Decoder().decodeBuffer(Sstr);
System.out.println("反序列化成一个byte[]字符串形式 :"+DSbuff);
//实现反序列化
BAIS=new ByteArrayInputStream(DSbuff);
OIS=new ObjectInputStream(BAIS);
ArrayList c=(ArrayList)(OIS.readObject());
System.out.println("反序列化后取提ArrayList的数据: "+c.get(0));
OIS.close();
}
catch (IOException e) {e.printStackTrace();}
catch (Exception ex) {System.out.println("序列化时产生错误");}
}
public static void main(String[] args){
myArrayListSerializer();
}
}