Java CipherOutputStream正在创建0字节文件

Java CipherOutputStream正在创建0字节文件,java,encryption,Java,Encryption,我正在尝试使用CipherOutputStream编写加密文件 用于序列化的代码 public class SerializeDemo implements Serializable{ private static final long serialVersionUID = -7128734972070518012L; private static SerializeDemo INSTANCE = null; private ArrayList <Serial

我正在尝试使用CipherOutputStream编写加密文件

用于序列化的代码

public class SerializeDemo implements Serializable{ 
    private static final long serialVersionUID = -7128734972070518012L;

    private static SerializeDemo INSTANCE = null;

    private ArrayList <SerializeItem> item;
    public static void serialize() {
       INSTANCE = new SerializeDemo();

       ArrayList < SerializeItem > list = new ArrayList < SerializeItem > ();

       SerializeItem item = new SerializeItem();

       item.setV1("DD");
       item.setV2("D");
       list.add(item);

       INSTANCE.setItem(list);
       try {
           Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
           c.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic());

           CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("D:\\abc"), c);
           ObjectOutputStream os = new ObjectOutputStream(cos);
           os.writeObject(INSTANCE);
           os.flush();
           os.close();
        } catch (Exception e) {
           e.printStackTrace();
          }

        System.out.println("Serialized");
    }
}

如果我在这个类中添加2个以上的字符串成员变量,序列化将停止,并且我将得到一个0字节的文件。请建议

RSA不是一种分组密码,并且不会像您期望的那样使用
CipherOutputStream
工作。
CipherOutputStream
上的
close
方法正在屏蔽一个
IllegalBlockSizeException
,该异常是由于数据长于块大小(keysize/8-padding)而引发的


如果在关闭之前调用
c.doFinal()
,您将看到异常。

RSA不是分组密码,并且不会像您预期的那样使用
CipherOutputStream
工作。
CipherOutputStream
上的
close
方法正在屏蔽一个
IllegalBlockSizeException
,该异常是由于数据长于块大小(keysize/8-padding)而引发的


如果在关闭之前调用
c.doFinal()
,您将看到异常。

即使没有写入对象,甚至没有
CipherOutputStream
,也不可能使用此代码获取零长度文件,除非出现异常。那是什么?注意:静态<代码>实例的要点让我无法理解。运行代码时没有错误,如果我只给出2个字段,那么我会得到一个非零长度的文件。静态实例用于实现单例模式。您发布的代码中只有两个字段。我们应该理解没有发布非工作版本吗?我已经发布了工作bean,但是如果add让我们说private String V3=null;并尝试加密代码,我们将得到一个0字节的文件,这让人难以置信。实际上不可能。再次查看是否存在异常,以及您是否真的在运行您认为正在运行的代码。即使没有写入对象,甚至没有
CipherOutputStream
,也不可能使用此代码获取零长度文件,除非存在异常。那是什么?注意:静态<代码>实例的要点让我无法理解。运行代码时没有错误,如果我只给出2个字段,那么我会得到一个非零长度的文件。静态实例用于实现单例模式。您发布的代码中只有两个字段。我们应该理解没有发布非工作版本吗?我已经发布了工作bean,但是如果add让我们说private String V3=null;并尝试加密代码,我们将得到一个0字节的文件,这让人难以置信。实际上不可能。再次查看是否存在异常,以及您是否真的在运行您认为正在运行的代码。
public class SerializeItem implements Serializable{ 
    private static final long serialVersionUID = 850426811900126363L;

    private String V1 = null;

    private String V2 = null;

//getter setters for the bean file
}