Externalizable interface in Java
The Externalizable interface provides a means for defining custom rules and implementing a personalized mechanism for object serialization. Prior to investigating into the intricacies of the Externalizable interface, it is essential to grasp the concept of serialization. Java Serialization offers built-in functionality to store objects and subsequently restore them. It employs intricate algorithms to comprehensively define the objects to be stored.
Serialization
In the serialization process, the responsibility for writing and reading objects lies entirely with the Java Virtual Machine (JVM). This default behavior proves advantageous in most scenarios, as it absolves developers from the need to concern themselves with the underlying complexities of serialization. By default, all instance variables, excluding static and transient variables, undergo the serialization process. Nonetheless, default serialization fails to safeguard sensitive information like passwords and credentials. Moreover, it falls short when developers aim to secure specific information during serialization.
Purpose
The purpose of the Externalizable interface extends beyond optimizing the performance of the serialization process. It serves as a means to implement custom processing and grants complete control over the format and contents of the object stream, including its super types. Externalization empowers programmers with full control over reading and writing objects during serialization, allowing for personalized and tailored handling of object streams.
Marshalling and unmarshalling objects
As its name suggests, the Externalizable interface facilitates the process of externalizing serialization. It enables the utilization of a custom-written mechanism for marshalling and unmarshalling objects. It is worth noting that the Externalizable interface extends the Serializable interface. When implementing this interface, it is necessary to override the following methods:
writeExternal(ObjectOutput out)
An object must implement this method, in order to store its state. For primitive types, the methods of the ObjectOutput class are called, while for objects, string and arrays, the writeObject method is sufficient.
readExternal(ObjectInput in)
An object implements this method, in order to restore its state. The readExternal method must read all values, along with their types, in the same sequence and format, as they were written by the writeExternal method.
ExampleIn earlier versions of Java, the reflection mechanism was known for its sluggish performance, which posed challenges when serializing large object graphs. To address this concern, the java.io.Externalizable interface was introduced as an alternative to java.io.Serializable. The Externalizable interface allows for the implementation of custom-written mechanisms for marshalling and unmarshalling objects.
Conclusion
With advancements in recent versions of Java, the performance of reflection has significantly improved, thereby mitigating the aforementioned performance issue. Consequently, the need for Externalization has become less prevalent. It is now primarily employed in rare cases where there is a specific requirement to store and reconstruct objects using an entirely different approach that does not rely on the default serialization mechanisms for data fields.
- Java Interview Questions-Core Faq - 1
- Java Interview Questions-Core Faq - 2
- Java Interview Questions-Core Faq - 3
- Features of Java Programming Language (2024)
- Difference between Java and JavaScript?
- What is the difference between JDK and JRE?
- What gives Java its 'write once and run anywhere' nature?
- What is JVM and is it platform independent?
- What is Just-In-Time (JIT) compiler?
- What is the garbage collector in Java?
- What is NullPointerException in Java
- Difference between Stack and Heap memory in Java
- How to set the maximum memory usage for JVM?
- What is numeric promotion?
- Generics in Java
- Static keyword in Java
- What are final variables in Java?
- How Do Annotations Work in Java?
- How do I use the ternary operator in Java?
- What is instanceof keyword in Java?
- How ClassLoader Works in Java?
- What are fail-safe and fail-fast Iterators in Java
- What are method references in Java?
- "Cannot Find Symbol" compile error
- Difference between system.gc() and runtime.gc()
- How to convert TimeStamp to Date in Java?
- Does garbage collection guarantee that a program will not run out of memory?
- How setting an Object to null help Garbage Collection?
- How do objects become eligible for garbage collection?
- How to calculate date difference in Java
- Difference between Path and Classpath in Java
- Is Java "pass-by-reference" or "pass-by-value"?
- Difference between static and nonstatic methods java
- Why Java does not support pointers?
- What is a package in Java?
- What are wrapper classes in Java?
- What is singleton class in Java?
- Difference between Java Local Variable, Instance Variable and a Class Variable?
- Can a top level class be private or protected in Java
- Are Polymorphism , Overloading and Overriding similar concepts?
- Locking Mechanism in Java
- Why Multiple Inheritance is Not Supported in Java
- Why Java is not a pure Object Oriented language?
- Static class in Java
- Difference between Abstract class and Interface in Java
- Why do I need to override the equals and hashCode methods in Java?
- Why does Java not support operator overloading?
- Anonymous Classes in Java
- Static Vs Dynamic class loading in Java
- Why am I getting a NoClassDefFoundError in Java?
- How to Generate Random Number in Java
- What's the meaning of System.out.println in Java?
- What is the purpose of Runtime and System class in Java?
- The finally Block in Java
- Difference between final, finally and finalize
- What is try-with-resources in java?
- What is a stacktrace?
- Why String is immutable in Java ?
- What are different ways to create a string object in Java?
- Difference between String and StringBuffer/StringBuilder in Java
- Difference between creating String as new() and literal | Java
- How do I convert String to Date object in Java?
- How do I create a Java string from the contents of a file?
- What actually causes a StackOverflow error in Java?
- Why is char[] preferred over String for storage of password in Java
- What is I/O Filter and how do I use it in Java?
- Serialization and Deserialization in Java
- Understanding transient variables in Java
- What is the purpose of serialization/deserialization in Java?
- What is the Difference between byte stream and Character streams
- How to append text to an existing file in Java
- How to convert InputStream object to a String in Java
- What is the difference between Reader and InputStream in Java
- Introduction to Java threads
- Synchronization in Java
- Static synchronization Vs non static synchronization in Java
- Deadlock in Java with Examples
- What is Daemon thread in Java
- Implement Runnable vs Extend Thread in Java
- What is the volatile keyword in Java
- What are the basic interfaces of Java Collections Framework
- Difference between ArrayList and Vector | Java
- What is the difference between ArrayList and LinkedList?
- What is the difference between List and Set in Java
- Difference between HashSet and HashMap in Java
- Difference between HashMap and Hashtable in Java?
- How does the hashCode() method of java works?
- Difference between capacity() and size() of Vector in Java
- What is a Java ClassNotFoundException?
- How to fix java.lang.UnsupportedClassVersionError