java序列化框架
㈠ java 中的序列化是什么意思
对象要想在网络中传输,或者存放的本地磁盘时,需要对其序列化。
最常见的就是视频流文件的读取(网络传输) 和 ORM框架(存储到数据库)
㈡ java 为什么序列化多个对象在一个文件里,却反序列化可以读取多个对象
readObject返回值为Object对象,从表面看我们只能读取一个序列化对象,但是数组也是Object对象,所以我们可以把序列化对象数组读取出来(List等集合框架也是好的选择),这样就可以实现读取多个对象。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Test {
public Test() {
// 创建序列化的对象数组
MyData [] myDatas = new MyData[10];
// 通过循环构造每一个对象
for(int i = 0; i < myDatas.length; i++){
myDatas[i] = new MyData("数据:" + (i + 1));
}
// 对象将要保存的文件
File file = new File("C:/mydata.dat");
// 对象输出流
ObjectOutputStream out = null;
// 对象输入流
ObjectInputStream in = null;
try {
// 将数组对象写入文件
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(myDatas);
out.flush();
out.close();
// 将数组对象从文件中读取
in = new ObjectInputStream(new FileInputStream(file));
MyData [] datas = (MyData[]) in.readObject();
for (MyData myData : datas) {
System.out.println(myData);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Test();
}
}
/**
* 序列化数据
*/
class MyData implements Serializable {
private String text = null;
public MyData(String text) {
this.text = text;
}
public String toString() {
return text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
㈢ java页面表单序列化怎么在后台取到序列化的值
一:取决于你使用的框架的传值方式
二:io流好像不能直接通过http协议传输,要转换吧 requset.getParameter("fieldName") 一样的取,ajax 是让浏览器异步发请求,不影响服务端的取值方式。
㈣ JAVA的multipartfile明明实现了serializable接口,为什么不能序列化
对multipartfile,显示指定一下serialVersionUID试试
private static final long serialVersionUID = 1L;
㈤ java 开发分布式项目使用bbo框架,遇到序列化问题,请大神解答,不胜感激!!
没有影响的,甚至序列化可以自己自定义实现,跟jdk版本没关系。
顺便分享下资料。
37套精品Java架构师高并发高性能高可用分布式集群电商缓存
㈥ java中,什么时候不能用Serializable
举个例子,你编写了一款游戏,保存记录时把所有状态一一保存非常麻烦,这时就可以使用Serializable(序列化接口),它的作用是可以将一个对象实例序列化,序列化后你可以选择将它保存在你需要的位置。相对的,读取后生成的对象所有属性(除了设置为瞬时值的属性)将和原对象的属性相同(只是内存地址不同)。这样可以方便的将一个java对象写入到磁盘中,保存该对象的所有状态!值得注意的是序列化的对象中包含的属性和其他对象都需要实现序列化接口,不然无法正常序列化!在hibernate里,并非所有的实体类必须实现序列化接口,因为在hibernate中我们通常是将基本类型的数值映射为数据库中的字段。而基础类型都实现了序列化接口(String也实现了)。所以,只有在想将一个对象完整存进数据库(存储为二进制码),而不是将对象的属性分别存进数据库,读取时再重新构建的话,就可以不用实现序列化接口。
㈦ 如何:向/自二进制流对对象进行序列化和反序列化(实体框架)
当将对象序列化为二进制流时,也将对当前加载到对象上下文中的所有相关对象进行序列化。有关更多信息,请参见序列化对象(实体框架)。本主题中的示例基于 Adventure Works 销售模型。若要运行本示例中的代码,必须已将 AdventureWorks 销售模型添加到您的项目中,并将项目配置为使用实体框架。为此,请完成如何:手动配置实体框架项目和如何:手动定义模型和映射文件(实体框架) 中的过程。C#VBpublicstaticvoid ReadFromBinaryStream() { BinaryFormatter formatter = new BinaryFormatter(); using (AdventureWorksEntities context = new AdventureWorksEntities()) { try { // Get the object graph for the selected customer// as a binary stream. MemoryStream stream = SerializeToBinaryStream(@"Adams"); // Read from the begining of the stream. stream.Seek(0, SeekOrigin.Begin); // Deserialize the customer graph from the binary stream// and attach to an ObjectContext. Contact contact = (Contact)formatter.Deserialize(stream); context.Attach(contact); // Display information for each item // in the orders that belong to the first contact.foreach (SalesOrderHeader order in contact.SalesOrderHeaders) { Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber)); Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString())); Console.WriteLine("Order items:"); foreach (SalesOrderDetail item in order.SalesOrderDetails) { Console.WriteLine(String.Format("Proct: {0} " + "Quantity: {1}", item.ProctID.ToString(), item.OrderQty.ToString())); } } } catch (SerializationException ex) { Console.WriteLine("The object graph could not be deserialized from " + "the binary stream because of the following error:"); Console.WriteLine(ex.ToString()); } } } privatestatic MemoryStream SerializeToBinaryStream(string lastName) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); using (AdventureWorksEntities context = new AdventureWorksEntities()) { // Specify a timeout for queries in this context, in seconds. context.CommandTimeout = 120; // Define a customer contact. Contact customer; // Create a Contact query with a path that returns // orders and items for a contact. ObjectQuery query = context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails"); try { // Return the first contact with the specified last name// along with its related orders and items. customer = query.Where("it.LastName = @lastname", new ObjectParameter("lastname", lastName)).First(); // Serialize the customer object graph. formatter.Serialize(stream, customer); } catch (EntitySqlException ex) { thrownew InvalidOperationException("The object query failed", ex); } catch ( ex) { thrownew InvalidOperationException("The object query failed", ex); } catch (SerializationException ex) { thrownew InvalidOperationException("The object graph could not be serialized", ex); } // Return the streamed object graph.return stream; } } 另请参见概念使用对象(实体框架)
㈧ java怎么把bytebuffer反序列化
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;
}
㈨ 为啥平时java代码都没有实现序列化
因为我们平时写的代码都是在本地跑的,不需要和别的系统进行通讯。
如果和其他的系统进行通讯,比如现在的分布式框架,A系统调用B系统里面的方法,就要用到http协议等通讯,这时候A系统里面的一些代码,java bean就要实现序列化,通过http传输过去,B接受到之后再反序列化。
现在的rpc框架,广泛的应用这个。
一点浅薄的见解,希望能帮到你。
㈩ java序列化框架有哪些
把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。