SlideShare a Scribd company logo
JOURNEY INTO THE WORLD OF JAVA:
JAVA SERIALIZATION
public class Vehicle{
public String number = "";
public Vehicle(){
System.out.println("Vehicle::Vehicle()");
}
}public class Car extends Vehicle implements Serializable{
public String mark = "";
public String model = "";
public Car(){
System.out.println("Car::Car()");
}
public Car(String mark, String model){
System.out.println("Car::Car(String, String)");
this.mark = mark;
this.model = model;
}
}
Serializable
public class Vehicle{
public String number = "";
public Vehicle(){
System.out.println("Vehicle::Vehicle()");
}
}
Serializable
public class Car extends Vehicle implements Serializable{
public String mark = "";
public String model = "";
public Car(){
System.out.println("Car::Car()");
}
public Car(String mark, String model){
System.out.println("Car::Car(String, String)");
this.mark = mark;
this.model = model;
}
}
Serializable
System.out.println("Creating...");
Car car = new Car("Zaz", "Forza");
car.number = "AA0001BP";
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
System.out.println("Serializing...");
objectOutputStream.writeObject(car);
objectOutputStream.flush();
byteArrayOutputStream.flush();
objectOutputStream.close();
byteArrayOutputStream.close();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
System.out.println("Deserializing...");
Car car2 = (Car)ois.readObject();
System.out.println("car2.number=" + car2.number);
System.out.println("car2.mark=" + car2.mark);
System.out.println("car2.model=" + car2.model);
Serializable
System.out.println("Creating...");
Car car = new Car("Zaz", "Forza");
car.number = "AA0001BP";
Serializable
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
System.out.println("Serializing...");
objectOutputStream.writeObject(car);
objectOutputStream.flush();
byteArrayOutputStream.flush();
objectOutputStream.close();
byteArrayOutputStream.close();
Serializable
ByteArrayInputStream bais = new
ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
System.out.println("Deserializing...");
Car car2 = (Car)ois.readObject();
System.out.println("car2.number=" + car2.number);
System.out.println("car2.mark=" + car2.mark);
System.out.println("car2.model=" + car2.model);
Serializable
Creating...
Vehicle::Vehicle()
Car::Car(String, String)
Serializing...
Deserializing...
Vehicle::Vehicle()
car2.number=
car2.mark=Zaz
car2.model=Forza
Serializable
Serializable. Secure
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException;
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException,
ClassNotFoundException;
private void java.io.ObjectInputStream.defaultWriteObject(java.io.ObjectOutputStream stream)
throws java.io.IOException;
private void java.io.ObjectInputStream.defaultReadObject(java.io.ObjectInputStream stream)
throws java.io.IOException,
ClassNotFoundException;
public interface java.io.ObjectInputValidation {
public void validateObject() throws InvalidObjectException;
}
Serializable. Features
public class ArrayList extends AbstractList implements List,
Cloneable,Serializable {
private transient Object elementData[];
private int size;
...
}
class List implements Serializable {
List next;
private static final ObjectStreamField[] serialPersistentFields
= {new ObjectStreamField("next", List.class)}
};
• Adding new fields to a class
• Changing the fields from static to nonstatic
• Changing the fields from transient to nontransient
Serializable. Can Manage Automatically
private static final long serialVersionUID = 3329999866918906824L;
private/public/protected Object readResolve() throws ObjectStreamException
private/public/protected Object writeReplace() throws ObjectStreamException
Serializable. Singleton
Serializable. Singleton
public class Singleton implements Serializable {
private static final long serialVersionUID = 8413502725007695828L;
private static Singleton instance = null;
public String name = "";
private Singleton(){};
public static Singleton getInstance(){
if (instance == null){
instance = new Singleton();
}
return instance;
}
private Object readResolve() throws ObjectStreamException{
instance.name = this.name;
return instance;
}
}
Serializable. Singleton
private Object readResolve() throws ObjectStreamException{
instance.name = this.name;
return instance;
}
}
Serializable. Singleton
Singleton instance1 = Singleton.getInstance();
instance1.name = "instance1";
............................................................................
System.out.println("Serializing...");
System.out.println("instance1.name:" + instance1.name);
..............................................................................
objectOutputStream.writeObject(instance1);
............................................................................
instance1.name = "instance2";
............................................................................
System.out.println("Deserializing...");
Singleton instance2 = (Singleton)ois.readObject();
if(instance1 == instance2){
System.out.println("instance1 == instance2");
}else{
System.out.println("instance1 != instance2");
}
System.out.println("instance2.name:" + instance2.name);
Serializable. Singleton
Singleton instance1 = Singleton.getInstance();
instance1.name = "instance1";
............................................................................
System.out.println("Serializing...");
System.out.println("instance1.name:" + instance1.name);
..............................................................................
objectOutputStream.writeObject(instance1);
............................................................................
instance1.name = "instance2";
Serializable. Singleton
............................................................................
System.out.println("Deserializing...");
Singleton instance2 = (Singleton)ois.readObject();
if(instance1 == instance2){
System.out.println("instance1 == instance2");
}else{
System.out.println("instance1 != instance2");
}
System.out.println("instance2.name:" + instance2.name);
Serializable. Singleton
Serializing...
instance1.name:instance1
Deserializing...
instance1 == instance2
instance2.name:instance1
Serializable. ENUM
public enum Color {
RED("red"),GREEN("green"),BLUE("blue");
private Color(String name){
this.name = name;
}
public String getName(){
return name;
}
private String name;
}
Serializable. ENUM
Color red1 = Color.RED;Color green1 = Color.GREEN;Color blue1 = Color.BLUE;
.....................................
System.out.println("Serializing...");
objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(red1);
objectOutputStream.writeObject(green1);
objectOutputStream.writeObject(blue1);
.....................................
System.out.println("Deserializing...");
Color red2 = (Color)ois.readObject();
Color green2 = (Color)ois.readObject();
Color blue2 = (Color)ois.readObject();
if(red1 == red2) System.out.println("red1 == red2");
if(green1 == green2) System.out.println("green1 == green2");
if(blue1 == blue2) System.out.println("blue1 == blue2");
Serializable. ENUM
Color red1 = Color.RED;
Color green1 = Color.GREEN;
Color blue1 = Color.BLUE;
.....................................
System.out.println("Serializing...");
objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(red1);
objectOutputStream.writeObject(green1);
objectOutputStream.writeObject(blue1);
Serializable. ENUM
.....................................
System.out.println("Deserializing...");
Color red2 = (Color)ois.readObject();
Color green2 = (Color)ois.readObject();
Color blue2 = (Color)ois.readObject();
if(red1 == red2) System.out.println("red1 == red2");
if(green1 == green2) System.out.println("green1 == green2");
if(blue1 == blue2) System.out.println("blue1 == blue2");
Serializable. ENUM
Serializing...
Deserializing...
red1 == red2
green1 == green2
blue1 == blue2
Serializable. ENUM
writeObject
writeReplace
serialPersistentFields
serialVersionUID
public interface Externalizable extends java.io.Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
Externalizable
Externalizable. Performance
public class ItemExt implements Externalizable{
private int fieldInt;
private boolean fieldBoolean;
private long fieldLong;
private float fieldFloat;
private double fieldDouble;
private String fieldString;
public ItemExt(){
this(0,true,0,0,0,"");
}
..................................................
Externalizable. Performance
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(fieldInt);
out.writeBoolean(fieldBoolean);
out.writeLong(fieldLong);
out.writeFloat(fieldFloat);
out.writeDouble(fieldDouble);
out.writeUTF(fieldString);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
fieldInt = in.readInt();
fieldBoolean = in.readBoolean();
fieldLong = in.readLong();
fieldFloat = in.readFloat();
fieldDouble = in.readDouble();
fieldString = in.readUTF();
}
Externalizable. Performance
public abstract class ContainerExt implements Externalizable{
protected List<ItemExt> items;
public ContainerExt(){
items = new LinkedList<ItemExt>();
}
public void addItem(ItemExt item){
items.add(item);
}
..................................................
}
/*ContainerExt1*/public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(items);
}
public void readExternal(ObjectInput in) throws
IOException, ClassNotFoundException {
items = (List<ItemExt>)in.readObject();
}
Externalizable. Performance
Externalizable. Performance
/*ContainerExt2*/
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(items.size());
for(Externalizable ext : items)
out.writeObject(ext);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
int count = in.readInt();
for(int i=0; i<count; i++){
ItemExt ext = (ItemExt)in.readObject();
items.add(ext);
}
}
/*ContainerExt3*/
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(items.size());
for(Externalizable ext : items)
ext.writeExternal(out);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException{
int count = in.readInt();
for(int i=0; i<count; i++){
ItemExt ext = new ItemExt();
ext.readExternal(in);
items.add(ext);
}
}
Externalizable. Performance
[java] Creating 100000 objects
[java] Serializable: written in 971ms, readed in 1353
[java] Externalizable1: written in 1026ms, readed in 1129
[java] Externalizable2: written in 909ms, readed in 1876
[java] Externalizable3: written in 49ms, readed in 268
06/16/2013 08:24 PM 5,547,651 cont.ser
06/16/2013 08:24 PM 5,747,559 contExt1.ser
06/16/2013 08:24 PM 5,747,521 contExt2.ser
06/16/2013 08:24 PM 4,871,155 contExt3.ser
Externalizable. Performance
https://github.com/MikhailGevak/Serialize
Ad

More Related Content

What's hot (20)

Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
Fabio Collini
 
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community confKotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
Fabio Collini
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
stable|kernel
 
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere StockholmKotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Fabio Collini
 
Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016
Danny Preussler
 
droidparts
droidpartsdroidparts
droidparts
Droidcon Berlin
 
DynaMine: Finding Common Error Patterns by Mining Software Revision Histories
DynaMine: Finding Common Error Patterns by Mining Software Revision HistoriesDynaMine: Finding Common Error Patterns by Mining Software Revision Histories
DynaMine: Finding Common Error Patterns by Mining Software Revision Histories
Thomas Zimmermann
 
Important java programs(collection+file)
Important java programs(collection+file)Important java programs(collection+file)
Important java programs(collection+file)
Alok Kumar
 
Abstract factory
Abstract factoryAbstract factory
Abstract factory
Muthukumar P
 
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
tdc-globalcode
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
mikaelbarbero
 
33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests
Tomek Kaczanowski
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScript
Ryan Anklam
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and Toothpick
Danny Preussler
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
Fabio Collini
 
Qunit Java script Un
Qunit Java script UnQunit Java script Un
Qunit Java script Un
akanksha arora
 
Dealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring testsDealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring tests
Alexander Tarlinder
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
Tomek Kaczanowski
 
Java programs
Java programsJava programs
Java programs
Mukund Gandrakota
 
Best Java Problems and Solutions
Best Java Problems and SolutionsBest Java Problems and Solutions
Best Java Problems and Solutions
Java Projects
 
Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
Fabio Collini
 
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community confKotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
Fabio Collini
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
stable|kernel
 
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere StockholmKotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Fabio Collini
 
Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016
Danny Preussler
 
DynaMine: Finding Common Error Patterns by Mining Software Revision Histories
DynaMine: Finding Common Error Patterns by Mining Software Revision HistoriesDynaMine: Finding Common Error Patterns by Mining Software Revision Histories
DynaMine: Finding Common Error Patterns by Mining Software Revision Histories
Thomas Zimmermann
 
Important java programs(collection+file)
Important java programs(collection+file)Important java programs(collection+file)
Important java programs(collection+file)
Alok Kumar
 
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
Fundamentos de Akka.net para sistemas concorrentes e distribuidos usando o mo...
tdc-globalcode
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
mikaelbarbero
 
33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests
Tomek Kaczanowski
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScript
Ryan Anklam
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and Toothpick
Danny Preussler
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
Fabio Collini
 
Dealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring testsDealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring tests
Alexander Tarlinder
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
Tomek Kaczanowski
 
Best Java Problems and Solutions
Best Java Problems and SolutionsBest Java Problems and Solutions
Best Java Problems and Solutions
Java Projects
 

Viewers also liked (20)

Mastering Java ByteCode
Mastering Java ByteCodeMastering Java ByteCode
Mastering Java ByteCode
Ecommerce Solution Provider SysIQ
 
Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?
Ecommerce Solution Provider SysIQ
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Ecommerce Solution Provider SysIQ
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
User focused design
User focused designUser focused design
User focused design
Ecommerce Solution Provider SysIQ
 
QA evolution to the present day
QA evolution to the present dayQA evolution to the present day
QA evolution to the present day
Ecommerce Solution Provider SysIQ
 
User Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website ElementsUser Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website Elements
Ecommerce Solution Provider SysIQ
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Ecommerce Solution Provider SysIQ
 
Frontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and HowFrontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and How
Ecommerce Solution Provider SysIQ
 
Management and Communications (IPAA)
Management and Communications (IPAA)Management and Communications (IPAA)
Management and Communications (IPAA)
Ecommerce Solution Provider SysIQ
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайн
Ecommerce Solution Provider SysIQ
 
Getting to know magento
Getting to know magentoGetting to know magento
Getting to know magento
Ecommerce Solution Provider SysIQ
 
Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?
Ecommerce Solution Provider SysIQ
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Ecommerce Solution Provider SysIQ
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Ecommerce Solution Provider SysIQ
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайн
Ecommerce Solution Provider SysIQ
 
Ad

Similar to Java serialization (20)

Java design patterns
Java design patternsJava design patterns
Java design patterns
Shawn Brito
 
Java doc Pr ITM2
Java doc Pr ITM2Java doc Pr ITM2
Java doc Pr ITM2
Aram Mohammed
 
Clean code in JavaScript
Clean code in JavaScriptClean code in JavaScript
Clean code in JavaScript
Mathieu Breton
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
Subramanyan Murali
 
Teste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrityTeste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrity
Washington Botelho
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML Schema
Raji Ghawi
 
Production.javapublic class Production {    Declaring instance.pdf
Production.javapublic class Production {    Declaring instance.pdfProduction.javapublic class Production {    Declaring instance.pdf
Production.javapublic class Production {    Declaring instance.pdf
sooryasalini
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with Android
Kurt Renzo Acosta
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the block
Richard Lord
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
Java Unit 1 Project
Java Unit 1 ProjectJava Unit 1 Project
Java Unit 1 Project
Matthew Abela Medici
 
Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)
ThomasHorta
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
Seok-joon Yun
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
Spring boot
Spring boot Spring boot
Spring boot
Vinay Prajapati
 
39927902 c-labmanual
39927902 c-labmanual39927902 c-labmanual
39927902 c-labmanual
Srinivasa Babji Josyula
 
39927902 c-labmanual
39927902 c-labmanual39927902 c-labmanual
39927902 c-labmanual
Srinivasa Babji Josyula
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
HamletDRC
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascript
Abimbola Idowu
 
Java design patterns
Java design patternsJava design patterns
Java design patterns
Shawn Brito
 
Clean code in JavaScript
Clean code in JavaScriptClean code in JavaScript
Clean code in JavaScript
Mathieu Breton
 
Teste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrityTeste de Integração com DbUnit e jIntegrity
Teste de Integração com DbUnit e jIntegrity
Washington Botelho
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML Schema
Raji Ghawi
 
Production.javapublic class Production {    Declaring instance.pdf
Production.javapublic class Production {    Declaring instance.pdfProduction.javapublic class Production {    Declaring instance.pdf
Production.javapublic class Production {    Declaring instance.pdf
sooryasalini
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with Android
Kurt Renzo Acosta
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the block
Richard Lord
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)
ThomasHorta
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
Seok-joon Yun
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
HamletDRC
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascript
Abimbola Idowu
 
Ad

More from Ecommerce Solution Provider SysIQ (14)

Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
Ecommerce Solution Provider SysIQ
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
Ecommerce Solution Provider SysIQ
 
Scalability and performance for e commerce
Scalability and performance for e commerceScalability and performance for e commerce
Scalability and performance for e commerce
Ecommerce Solution Provider SysIQ
 
Going global
Going globalGoing global
Going global
Ecommerce Solution Provider SysIQ
 
Going Global
Going GlobalGoing Global
Going Global
Ecommerce Solution Provider SysIQ
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
Ecommerce Solution Provider SysIQ
 
QA evolution, in pictures
QA evolution, in picturesQA evolution, in pictures
QA evolution, in pictures
Ecommerce Solution Provider SysIQ
 
IGears: Template Architecture and Principles
IGears: Template Architecture and PrinciplesIGears: Template Architecture and Principles
IGears: Template Architecture and Principles
Ecommerce Solution Provider SysIQ
 
Interactive web prototyping
Interactive web prototypingInteractive web prototyping
Interactive web prototyping
Ecommerce Solution Provider SysIQ
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработке
Ecommerce Solution Provider SysIQ
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
Ecommerce Solution Provider SysIQ
 

Recently uploaded (20)

DevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptxDevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
Justin Reock
 
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier VroomAI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
UXPA Boston
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Agentic Automation - Delhi UiPath Community Meetup
Agentic Automation - Delhi UiPath Community MeetupAgentic Automation - Delhi UiPath Community Meetup
Agentic Automation - Delhi UiPath Community Meetup
Manoj Batra (1600 + Connections)
 
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Wonjun Hwang
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Dark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanizationDark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanization
Jakub Šimek
 
Artificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptxArtificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptx
03ANMOLCHAURASIYA
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
machines-for-woodworking-shops-en-compressed.pdf
machines-for-woodworking-shops-en-compressed.pdfmachines-for-woodworking-shops-en-compressed.pdf
machines-for-woodworking-shops-en-compressed.pdf
AmirStern2
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Maarten Verwaest
 
IT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information TechnologyIT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information Technology
SHEHABALYAMANI
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptxDevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
Justin Reock
 
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier VroomAI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
UXPA Boston
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Wonjun Hwang
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Dark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanizationDark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanization
Jakub Šimek
 
Artificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptxArtificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptx
03ANMOLCHAURASIYA
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
machines-for-woodworking-shops-en-compressed.pdf
machines-for-woodworking-shops-en-compressed.pdfmachines-for-woodworking-shops-en-compressed.pdf
machines-for-woodworking-shops-en-compressed.pdf
AmirStern2
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Maarten Verwaest
 
IT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information TechnologyIT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information Technology
SHEHABALYAMANI
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 

Java serialization

  • 1. JOURNEY INTO THE WORLD OF JAVA: JAVA SERIALIZATION
  • 2. public class Vehicle{ public String number = ""; public Vehicle(){ System.out.println("Vehicle::Vehicle()"); } }public class Car extends Vehicle implements Serializable{ public String mark = ""; public String model = ""; public Car(){ System.out.println("Car::Car()"); } public Car(String mark, String model){ System.out.println("Car::Car(String, String)"); this.mark = mark; this.model = model; } } Serializable
  • 3. public class Vehicle{ public String number = ""; public Vehicle(){ System.out.println("Vehicle::Vehicle()"); } } Serializable
  • 4. public class Car extends Vehicle implements Serializable{ public String mark = ""; public String model = ""; public Car(){ System.out.println("Car::Car()"); } public Car(String mark, String model){ System.out.println("Car::Car(String, String)"); this.mark = mark; this.model = model; } } Serializable
  • 5. System.out.println("Creating..."); Car car = new Car("Zaz", "Forza"); car.number = "AA0001BP"; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); System.out.println("Serializing..."); objectOutputStream.writeObject(car); objectOutputStream.flush(); byteArrayOutputStream.flush(); objectOutputStream.close(); byteArrayOutputStream.close(); ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); System.out.println("Deserializing..."); Car car2 = (Car)ois.readObject(); System.out.println("car2.number=" + car2.number); System.out.println("car2.mark=" + car2.mark); System.out.println("car2.model=" + car2.model); Serializable
  • 6. System.out.println("Creating..."); Car car = new Car("Zaz", "Forza"); car.number = "AA0001BP"; Serializable
  • 7. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); System.out.println("Serializing..."); objectOutputStream.writeObject(car); objectOutputStream.flush(); byteArrayOutputStream.flush(); objectOutputStream.close(); byteArrayOutputStream.close(); Serializable
  • 8. ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); System.out.println("Deserializing..."); Car car2 = (Car)ois.readObject(); System.out.println("car2.number=" + car2.number); System.out.println("car2.mark=" + car2.mark); System.out.println("car2.model=" + car2.model); Serializable
  • 10. Serializable. Secure private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException; private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException; private void java.io.ObjectInputStream.defaultWriteObject(java.io.ObjectOutputStream stream) throws java.io.IOException; private void java.io.ObjectInputStream.defaultReadObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException; public interface java.io.ObjectInputValidation { public void validateObject() throws InvalidObjectException; }
  • 11. Serializable. Features public class ArrayList extends AbstractList implements List, Cloneable,Serializable { private transient Object elementData[]; private int size; ... } class List implements Serializable { List next; private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)} };
  • 12. • Adding new fields to a class • Changing the fields from static to nonstatic • Changing the fields from transient to nontransient Serializable. Can Manage Automatically private static final long serialVersionUID = 3329999866918906824L;
  • 13. private/public/protected Object readResolve() throws ObjectStreamException private/public/protected Object writeReplace() throws ObjectStreamException Serializable. Singleton
  • 14. Serializable. Singleton public class Singleton implements Serializable { private static final long serialVersionUID = 8413502725007695828L; private static Singleton instance = null; public String name = ""; private Singleton(){}; public static Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } return instance; } private Object readResolve() throws ObjectStreamException{ instance.name = this.name; return instance; } }
  • 15. Serializable. Singleton private Object readResolve() throws ObjectStreamException{ instance.name = this.name; return instance; } }
  • 16. Serializable. Singleton Singleton instance1 = Singleton.getInstance(); instance1.name = "instance1"; ............................................................................ System.out.println("Serializing..."); System.out.println("instance1.name:" + instance1.name); .............................................................................. objectOutputStream.writeObject(instance1); ............................................................................ instance1.name = "instance2"; ............................................................................ System.out.println("Deserializing..."); Singleton instance2 = (Singleton)ois.readObject(); if(instance1 == instance2){ System.out.println("instance1 == instance2"); }else{ System.out.println("instance1 != instance2"); } System.out.println("instance2.name:" + instance2.name);
  • 17. Serializable. Singleton Singleton instance1 = Singleton.getInstance(); instance1.name = "instance1"; ............................................................................ System.out.println("Serializing..."); System.out.println("instance1.name:" + instance1.name); .............................................................................. objectOutputStream.writeObject(instance1); ............................................................................ instance1.name = "instance2";
  • 18. Serializable. Singleton ............................................................................ System.out.println("Deserializing..."); Singleton instance2 = (Singleton)ois.readObject(); if(instance1 == instance2){ System.out.println("instance1 == instance2"); }else{ System.out.println("instance1 != instance2"); } System.out.println("instance2.name:" + instance2.name);
  • 20. Serializable. ENUM public enum Color { RED("red"),GREEN("green"),BLUE("blue"); private Color(String name){ this.name = name; } public String getName(){ return name; } private String name; }
  • 21. Serializable. ENUM Color red1 = Color.RED;Color green1 = Color.GREEN;Color blue1 = Color.BLUE; ..................................... System.out.println("Serializing..."); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(red1); objectOutputStream.writeObject(green1); objectOutputStream.writeObject(blue1); ..................................... System.out.println("Deserializing..."); Color red2 = (Color)ois.readObject(); Color green2 = (Color)ois.readObject(); Color blue2 = (Color)ois.readObject(); if(red1 == red2) System.out.println("red1 == red2"); if(green1 == green2) System.out.println("green1 == green2"); if(blue1 == blue2) System.out.println("blue1 == blue2");
  • 22. Serializable. ENUM Color red1 = Color.RED; Color green1 = Color.GREEN; Color blue1 = Color.BLUE; ..................................... System.out.println("Serializing..."); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(red1); objectOutputStream.writeObject(green1); objectOutputStream.writeObject(blue1);
  • 23. Serializable. ENUM ..................................... System.out.println("Deserializing..."); Color red2 = (Color)ois.readObject(); Color green2 = (Color)ois.readObject(); Color blue2 = (Color)ois.readObject(); if(red1 == red2) System.out.println("red1 == red2"); if(green1 == green2) System.out.println("green1 == green2"); if(blue1 == blue2) System.out.println("blue1 == blue2");
  • 24. Serializable. ENUM Serializing... Deserializing... red1 == red2 green1 == green2 blue1 == blue2
  • 26. public interface Externalizable extends java.io.Serializable { void writeExternal(ObjectOutput out) throws IOException; void readExternal(ObjectInput in) throws IOException, ClassNotFoundException; } Externalizable
  • 27. Externalizable. Performance public class ItemExt implements Externalizable{ private int fieldInt; private boolean fieldBoolean; private long fieldLong; private float fieldFloat; private double fieldDouble; private String fieldString; public ItemExt(){ this(0,true,0,0,0,""); } ..................................................
  • 28. Externalizable. Performance public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(fieldInt); out.writeBoolean(fieldBoolean); out.writeLong(fieldLong); out.writeFloat(fieldFloat); out.writeDouble(fieldDouble); out.writeUTF(fieldString); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { fieldInt = in.readInt(); fieldBoolean = in.readBoolean(); fieldLong = in.readLong(); fieldFloat = in.readFloat(); fieldDouble = in.readDouble(); fieldString = in.readUTF(); }
  • 29. Externalizable. Performance public abstract class ContainerExt implements Externalizable{ protected List<ItemExt> items; public ContainerExt(){ items = new LinkedList<ItemExt>(); } public void addItem(ItemExt item){ items.add(item); } .................................................. }
  • 30. /*ContainerExt1*/public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(items); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { items = (List<ItemExt>)in.readObject(); } Externalizable. Performance
  • 31. Externalizable. Performance /*ContainerExt2*/ public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(items.size()); for(Externalizable ext : items) out.writeObject(ext); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { int count = in.readInt(); for(int i=0; i<count; i++){ ItemExt ext = (ItemExt)in.readObject(); items.add(ext); } }
  • 32. /*ContainerExt3*/ public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(items.size()); for(Externalizable ext : items) ext.writeExternal(out); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException{ int count = in.readInt(); for(int i=0; i<count; i++){ ItemExt ext = new ItemExt(); ext.readExternal(in); items.add(ext); } } Externalizable. Performance
  • 33. [java] Creating 100000 objects [java] Serializable: written in 971ms, readed in 1353 [java] Externalizable1: written in 1026ms, readed in 1129 [java] Externalizable2: written in 909ms, readed in 1876 [java] Externalizable3: written in 49ms, readed in 268 06/16/2013 08:24 PM 5,547,651 cont.ser 06/16/2013 08:24 PM 5,747,559 contExt1.ser 06/16/2013 08:24 PM 5,747,521 contExt2.ser 06/16/2013 08:24 PM 4,871,155 contExt3.ser Externalizable. Performance