Download serialize

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Java Iterators
interface Collection {
…
Iterator iterator();
…
}
Interface Iterator {
boolean hasNext() ;
Object next() ;
void remove() ;
}
interface Set extends Collection {
…
Iterator iterator();
…
}
Interface ListIterator extends Iterator {
boolean hasNext() ;
Object next() ;
boolean hasPrevious() ;
Object previous() ;
int nextIndex() ;
int previousIndex() ;
void remove() ;
void set(Object o) ;
void add(Object o) ;
}
interface List extends Collection {
…
Iterator iterator();
ListIterator listIterator();
ListIterator listIterator(int index);
…
}
Java Iterator
import java.util.*;
public class IteratorExample {
public static void main(String[] args) {
List ints = new ArrayList();
for(int i = 0; i < 10; i++)
ints.add(new Integer(i));
Iterator e = ints.iterator();
while(e.hasNext())
System.out.println( ((Integer)e.next()).intValue() ) ;
}
}
Object Serialization
Object Serialization
To represent an object in a byte-encoded
format that can be stored and passed to a
stream, and in need can be reconstructed.
Live Object
Live Object
Frozen Object Stream
Serialize
DeSerialize
Serialization

ObjectOutputStream & ObjectInputStream





Serialization can be used in.



Remote Method Invocation (RMI), communication between objects via
sockets. (Marshaling and unmarshaling objects)
Archival of an object for use in a later invocation of the same program.
Objects to be serialized



Works like other input-output streams
They can write and read Objects.
ObjectOutputStream: Serializes Java Objects into a byte-encoded
format, and writes them onto an OutputStream.
ObjectInputStream: Reads and reconstructs Java Objects from a byteencoded format read from InputStream.
Must implement Serializable interface
Non-persistent fields can be marked with transient keyword
The following is written and read during serialization



Class of the object
Class signature
Values of all non-transient and non-static members
Serialization

To Write into an ObjectOutputStream
FileOutputStream out = new FileOutputStream(“afile”) ;
ObjectOutputStream oos = new ObjectOutputStream(out) ;
oos.writeObject(“Today”) ;
oos.writeObject(new Date()) ;
oos.flush() ;

To Read from an ObjectInputStream
FileInputStream in = new FileInputStream(“afile”) ;
ObjectInputStream ois = new ObjectInputStream(in) ;
String today = (String) ois.readObject() ;
Date date = (Date) ois.readObject() ;
Serialization


ObjectOutputStream.writeObject(Object)
traverses all the internal references of the object
recursively and writes all of them.
ObjectOutputStream implements DataOutput
interface to write primitive data types.
writeInt(…), writeFloat(…), writeUTF(…), etc.

ObjectInputStream implements DataInput
interface ro read primitive data types.
readInt(), readFloat(), readUTF(), etc.

writeObject(Object) throws
NotSerializableException if Object does not
implement Serializable interface
Object Serialization Example
import java.io.* ;
import java.util.* ;
class A implements Serializable {
public int i = 5 ;
public String str = "Hi" ;
public List l = new ArrayList() ;
}
public class ObjSerTest {
public static void main(String[]args) {
A a = new A() ;
a.i = 10 ; a.str = "Hello" ;
a.l.add("One") ; a.l.add("Two") ;
serialize(a) ;
}
private static void serialize(A a) {
System.out.println("Serializing...");
try {
FileOutputStream fos = new FileOutputStream("test.out") ;
ObjectOutputStream oos = new ObjectOutputStream(fos) ;
oos.writeObject(a) ;
} catch (Exception e) {
System.err.println("Problem: "+e) ;
}
}
}
Object De-serialization Example
import java.io.* ;
import java.util.* ;
class A implements Serializable {
public int i = 5 ;
public String str = "Hi" ;
public List l = new ArrayList() ;
}
public class ObjDeSerTest {
public static void main(String[]args) {
A a = deserialize() ;
System.out.println(a.i) ;
System.out.println(a.str) ;
System.out.println(a.l) ;
}
private static A deserialize() {
System.out.println("DeSerializing...");
try {
FileInputStream fis = new FileInputStream("test.out") ;
ObjectInputStream iis = new ObjectInputStream(fis) ;
return (A) iis.readObject() ;
} catch (Exception e) {
System.err.println("Problem: "+e) ;
}
return null ;
}
}
Customizing Serialization

To define writeObject() and readObject() to append
additional information.
private void writeObject(ObjectOutputStream oos) throws
IOException {
oos.defaultWriteObject() ;
// customized serialization code
}
private void readObject(ObjectInputStream ois) throws
IOException {
ois.defaultReadObject() ;
// customized deserialization code
// if necessary, must include code to update the object
}
Externalizable interface

To control the serialization process explicitly,
Externalizable interface must be implemented.

Externalizable interface
public interface Externalizable extends Serializable {
public void writeExternal(ObjectOutput out) throws IOException
;
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException ;
}

writeExternal and readExternal must save/load the state
of the object. They must explicitly coordinate with its
supertype to save its state.
General Programming Tips
General Programming Tips

Try to write self-documented programs:


Use logical variable names and function names :
not : int x;
but : int studentCount;
Comments
Use comments whenever something is unclear. Think that you are telling some other
person about your code. (After a long time, this person might be you)

Coding Conventions

Class names start with Capital


Instance names, fields, function names start with lower, etc.




Object myObject ;
int myInt ;
void myFunc() { …
Static Final variables are All-Capitalized


class MyClass {
static final MAXVALUE = 200 ;
Necessary Tabs and spaces in Blocks. (Theoretically you can write a long
program in a single line)
General Programming Tips

Use getter, setter, and is methods.




int getCount() ;
int setCount() ;
isEmpty() ;
Self-checking classes


Use main() almost in every class to check class
functionality.
You can make an expected output check, in order to
verify changes in the class.
General Programming Tips




In highly coupled classes, consider to make inner classes.
Keep method definitions and scopes as short as possible. (For easy
visualization and readability.)
Compiler-time errors are better then run time errors.
Prefer Interface definition to Abstract Class



Spelling problems in overriding Classes



Not : abstract class X { abstract void f() ; }
But : interface X { void f() ;
class X { void encode() { … } }
class Y extends X { void Encode() { … } }
Use Java Container Library classes




List l = new ArrayList() ;
Map hm = new HashMap() ;
Set s = new HashSet() ;
List myStack = new LinkedList() ;
// Does not overload the method
Debugging a program



Handle Exceptions in their proper level.
try { … } catch (Throwable) { … } // Bad
Don’t output errors to System.out, but to System.err
For Debugging code use a single global boolean variable
showing the Debug mode.
bDebug = true ; …
if (bDebug) { // Print some information
Care must be taken not to change any state inside.
if (bDebug) { if (i++==0) … }