Мои code-Получение OptionalDataException из примитивного значения INT, но как избежать этого в JAVA
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectStreamExample {
/**
* @param args
*/
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("Abhishek");
person.setLastName("Choudhary");
person.setAge(25);
person.setHouseNum(256);
ObjectOutputStream stream = null;
try {
stream = new ObjectOutputStream(new FileOutputStream(new File("Serialize.txt")));
stream.writeUTF(person.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(stream != null)
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ObjectInputStream input = null;
try {
input = new ObjectInputStream(new FileInputStream(new File("Serialize.txt")));
Person person2 = (Person) input.readObject();
System.out.println(person2.getFirstName());
System.out.println(person2.getLastName());
System.out.println(person2.getAge());
System.out.println(person2.getHouseNum());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
if(input != null)
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
и один Person файл компонента.
Я получаю исключение
java.io.OptionalDataException на java.io.ObjectInputStream.readObject0 (Unknown Source) в java.io.ObjectInputStream.readObject (Unknown Source) в com.practise .interview.nio.ObjectStreamExample.main (ObjectStreamExample.java:62)
Это становится поднят, потому что я думаю, -
Была предпринята попытка прочитать объект, когда следующий элемент в потоке является примитивным. В этом случае поле длины OptionalDataException устанавливается на количество байтов примитивных данных , которые можно легко прочитать из потока, а поле eof установлено равным .
Но как этого избежать, как я знаю, я установил первобытную ценность, поэтому избегаю.
«* В контексте сериализации, символьная строка UTF считаются примитивными данными *» - Источник? –
«Строка» не сериализуется как любой другой объект, содержащий символ «char []», но обрабатывается специально каркасом. - https://docs.oracle.com/javase/8/docs/platform/serialization/spec/output.html#a933 - "9. Если объектом является java.lang.String, строка записывается как длина информацию, за которой следует содержимое строки, закодированной в модифицированном UTF-8 ». - https://docs.oracle.com/javase/8/docs/platform/serialization/spec/serial-arch.html#a4176 - «Примитивные типы данных записываются в поток с помощью методов в интерфейсе DataOutput, таких как как writeInt, writeFloat или writeUTF. " –