如何修复java.lang.ClassCastException: [B无法转换为java.util.List的问题

4
我正在用Java创建数字签名软件,希望该软件可以使用参数(string filename, string keyfile)验证消息。 但是我在以下代码行遇到了异常:
this.list2 = (List) 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.");
}

1
你正在将 in.readObject() 强制转换为 List<byte[]>,看起来 in.readObject() 返回的是 byte[] - MadProgrammer
那么我应该做什么呢? - Emad
将其转换为 byte[],或更改源文件的编写方式。 - MadProgrammer
in.readObject正在返回Object。 - Mykhailo Moskura
1个回答

1

您试图将in.readObject()文件转换为List

这在Java中不起作用,因为该文件是以byte[] Array数据结构编写的,而不是Array List。在将其设置为this.list2的值之前,您必须将byte[] Array转换为列表。

以下是如何执行此操作的:

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

Array.asList() 可以将 byte 原始类型的数组转换为 List(根据您的代码,我假设您正在使用 byte 原始类型而不是 Byte 类)。在 Java 中无法简单地将数组强制转换为列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接