SlideShare a Scribd company logo
1 of 34
Download to read offline
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

More Related Content

What's hot

Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose worldFabio 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 confFabio Collini
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Managementstable|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 StockholmFabio 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 2016Danny 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 HistoriesThomas 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 Nantesmikaelbarbero
 
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 TestsTomek 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 JavaScriptRyan Anklam
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDanny Preussler
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutinesFabio 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 testsAlexander Tarlinder
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good TestsTomek Kaczanowski
 
Best Java Problems and Solutions
Best Java Problems and SolutionsBest Java Problems and Solutions
Best Java Problems and SolutionsJava Projects
 

What's hot (20)

Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
 
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
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
 
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
 
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
 
droidparts
droidpartsdroidparts
droidparts
 
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
 
Important java programs(collection+file)
Important java programs(collection+file)Important java programs(collection+file)
Important java programs(collection+file)
 
Abstract factory
Abstract factoryAbstract factory
Abstract factory
 
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...
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
 
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
 
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
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and Toothpick
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
 
Qunit Java script Un
Qunit Java script UnQunit Java script Un
Qunit Java script Un
 
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
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
 
Java programs
Java programsJava programs
Java programs
 
Best Java Problems and Solutions
Best Java Problems and SolutionsBest Java Problems and Solutions
Best Java Problems and Solutions
 

Viewers also liked

Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Ecommerce Solution Provider SysIQ
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Ecommerce Solution Provider SysIQ
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSEcommerce Solution Provider SysIQ
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайнEcommerce Solution Provider SysIQ
 

Viewers also liked (20)

Mastering Java ByteCode
Mastering Java ByteCodeMastering Java ByteCode
Mastering Java ByteCode
 
Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
 
Unexpected achievements 2013
Unexpected achievements 2013Unexpected achievements 2013
Unexpected achievements 2013
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
 
User focused design
User focused designUser focused design
User focused design
 
Speed Up Your Website
Speed Up Your WebsiteSpeed Up Your Website
Speed Up Your Website
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
QA evolution to the present day
QA evolution to the present dayQA evolution to the present day
QA evolution to the present day
 
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
 
Manifest of modern engineers
Manifest of modern engineersManifest of modern engineers
Manifest of modern engineers
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSS
 
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
 
Management and Communications (IPAA)
Management and Communications (IPAA)Management and Communications (IPAA)
Management and Communications (IPAA)
 
Lupan big enterprise ecommerce fusion 2013
Lupan   big enterprise ecommerce fusion 2013Lupan   big enterprise ecommerce fusion 2013
Lupan big enterprise ecommerce fusion 2013
 
All things php
All things phpAll things php
All things php
 
Testing schools overview
Testing schools overviewTesting schools overview
Testing schools overview
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайн
 
Getting to know magento
Getting to know magentoGetting to know magento
Getting to know magento
 
Seo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web ArchitectureSeo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web Architecture
 

Similar to Java serialization

Java design patterns
Java design patternsJava design patterns
Java design patternsShawn Brito
 
Clean code in JavaScript
Clean code in JavaScriptClean code in JavaScript
Clean code in JavaScriptMathieu 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 jIntegrityWashington Botelho
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML SchemaRaji 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.pdfsooryasalini
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»SpbDotNet Community
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with AndroidKurt 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 blockRichard 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 TypeScriptSeok-joon Yun
 
Ast transformations
Ast transformationsAst transformations
Ast transformationsHamletDRC
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokusHamletDRC
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascriptAbimbola Idowu
 

Similar to Java serialization (20)

Java design patterns
Java design patternsJava design patterns
Java design patterns
 
Java doc Pr ITM2
Java doc Pr ITM2Java doc Pr ITM2
Java doc Pr ITM2
 
Clean code in JavaScript
Clean code in JavaScriptClean code in JavaScript
Clean code in JavaScript
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
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
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML Schema
 
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
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with Android
 
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
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
 
Java Unit 1 Project
Java Unit 1 ProjectJava Unit 1 Project
Java Unit 1 Project
 
Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)
 
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
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
 
Spring boot
Spring boot Spring boot
Spring boot
 
39927902 c-labmanual
39927902 c-labmanual39927902 c-labmanual
39927902 c-labmanual
 
39927902 c-labmanual
39927902 c-labmanual39927902 c-labmanual
39927902 c-labmanual
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascript
 

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
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
 
Scalability and performance for e commerce
Scalability and performance for e commerceScalability and performance for e commerce
Scalability and performance for e commerce
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Going global
Going globalGoing global
Going global
 
Going Global
Going GlobalGoing Global
Going Global
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
QA evolution, in pictures
QA evolution, in picturesQA evolution, in pictures
QA evolution, in pictures
 
Databases on Client Side
Databases on Client SideDatabases on Client Side
Databases on Client Side
 
IGears: Template Architecture and Principles
IGears: Template Architecture and PrinciplesIGears: Template Architecture and Principles
IGears: Template Architecture and Principles
 
Interactive web prototyping
Interactive web prototypingInteractive web prototyping
Interactive web prototyping
 
Модульные сетки в реальном мире
Модульные сетки в реальном миреМодульные сетки в реальном мире
Модульные сетки в реальном мире
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработке
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
 

Recently uploaded

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

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