如何解决此java.lang.ClassCastException:[B不能强制转换为java.util.List

时间:2019-01-08 05:04:30

标签: java classcastexception

我正在用Java创建数字签名软件,我想使用该软件来验证带有参数(字符串文件名,字符串密钥文件)的消息。 但是我在行

this.list2 = (List<byte[]>) in.readObject();

  

java.lang.ClassCastException:[B不能转换为java.util.List。怎么样   解决这个问题?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.nio.file.Files;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

private boolean verifySignature(byte[] data, byte[] signature, String 
keyFile) throws Exception {
    Signature sig = Signature.getInstance("SHA1withRSA");
    sig.initVerify(getPublic(keyFile));
    sig.update(data);

    return sig.verify(signature);
}

public void VerifyMessage(String filename, String keyFile) throws Exception 
    {
    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename)))
    {

        this.list2 = (List<byte[]>) in.readObject();
    }

    lbl13.setText(verifySignature(list2.get(0), list2.get(1), keyFile) ? "VERIFIED MESSAGE" + 
      "\n----------------\n" + new String(list2.get(0)) : "Could not verify the signature.");
}

2 个答案:

答案 0 :(得分:2)

  

您正在尝试将in.readObject()文件投射到列表中

这在Java中不起作用,因为文件是作为 byte [] 数组数据结构而不是数组列表写入的。您必须先将 byte [] 数组转换为列表,然后再将其设为this.list2的值。

这是您可以执行的操作:

this.list2 = Arrays.asList((byte[])in.readObject());

Array.asList()会将您的字节原语数组转换为列表(我假设您使用的是字节原语,而不是根据您的代码使用的Byte类)。用Java将数组简单地转换为列表是不可能的。

答案 1 :(得分:0)

您可以写:

this.list2=Arrays.asList((byte[])in.readObject());

这应该有帮助