Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I’;m使用反序列化方法创建对象获取异常“;NullPointerException”;?_Java - Fatal编程技术网

Java I’;m使用反序列化方法创建对象获取异常“;NullPointerException”;?

Java I’;m使用反序列化方法创建对象获取异常“;NullPointerException”;?,java,Java,我尝试用四种不同的方式为一个类创建对象,但是我可以用三种方式创建对象。但每当我使用反序列化方法创建一个对象时,就会出现异常“NullPointerException”。请告诉我解决该异常的可能方法 下面是代码 import java.io.InputStream; import java.io.ObjectInputStream; class Student{ private String name; public String getName(){ retu

我尝试用四种不同的方式为一个类创建对象,但是我可以用三种方式创建对象。但每当我使用反序列化方法创建一个对象时,就会出现异常“NullPointerException”。请告诉我解决该异常的可能方法

下面是代码

import java.io.InputStream;
import java.io.ObjectInputStream;

class Student{
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String s){
        name=s;
    }
}
public class TestEncaps implements Cloneable{

    public void Testing(){
        System.out.println("Testing is On Going");
    }
    protected Object clone() throws CloneNotSupportedException {
        return  (TestEncaps) super.clone();
    }

    /**
     * @param args
     * @throws CloneNotSupportedException 
     */
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

     Student s = new Student();
     s.setName("Lakshmikantham");
     System.out.println(s.getName());

     TestEncaps te = new TestEncaps();

     TestEncaps te1 = (TestEncaps) te.clone();

     te1.Testing();
     te.Testing();

     try{
       InputStream inputStream = null;
        ObjectInputStream inStream = new ObjectInputStream(inputStream);
        TestEncaps object4 = (TestEncaps) inStream.readObject();

        object4.Testing();
     }catch(Exception e){
         e.printStackTrace();
     }finally{

     }
    }

}

您需要将序列化文件作为输入传递给
InputStream
,并将其对象传递给
ObjectInputStream

      TestEncaps object4 = null;
      FileInputStream inputFileStream = new FileInputStream("file.dat");
      ObjectInputStream objectInputStream = new ObjectInputStream(inputFileStream);
      object4 = (TestEncaps)objectInputStream.readObject();

我怀疑inputStream在此代码片段中可能为null:

InputStream inputStream = null;
ObjectInputStream inStream = new ObjectInputStream(inputStream);

您正在创建参数为null的ObjectInputStream

InputStream inputStream = null;
ObjectInputStream inStream = new ObjectInputStream(inputStream);
TestEncaps object4 = (TestEncaps) inStream.readObject();


你缺少三样东西

  • 学生类需要实现可序列化
  • 您需要将其序列化为文件
  • 您需要从文件中反序列化它
  • 举一个简单的例子,应该足以让你自己解决问题

    您正试图从
    null
    流读取对象

    这导致了异常

     InputStream inputStream = null;
            ObjectInputStream inStream = new ObjectInputStream(inputStream);
    
    ObjectInputStream被称为连接流,它可以与I/O或网络流连接,从中可以读取序列化数据,在您的例子中,您可以直截了当地说

       ObjectInputStream inStream = new ObjectInputStream(null);
    
    并且基本上尝试从
    null
    读取,因此出现了null指针异常

    首先尝试将一些对象写入序列化文件(.ser type),然后从中读取,或者将已经存在的序列化文件传递给
    ObjectInputStream
    ,如下所示

    FileInputStream fs=new FileInputStream(""likeThis.ser");
    ObjectInputStream inStream = new ObjectInputStream(fs);
    
    然后读一读

    FileInputStream fs=new FileInputStream(""likeThis.ser");
    ObjectInputStream inStream = new ObjectInputStream(fs);