java - 如何修复此 java.lang.ClassCastException:[B 无法转换为 java.util.List
问题描述
我正在用 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.");
}
解决方案
您正在尝试将
in.readObject()
文件转换为列表
这在 Java 中不起作用,因为文件被写为byte[]数组数据结构,而不是数组列表。您必须先将byte[]数组转换为列表,然后再使其成为this.list2
.
您可以这样做:
this.list2 = Arrays.asList((byte[])in.readObject());
Array.asList()
会将您的字节原语数组转换为列表(我假设您使用的是字节原语,而不是基于您的代码的 Byte 类)。在 Java 中不能简单地将 Array 转换为 List。
推荐阅读
- git - 推送后在远程服务器上看不到我的代码
- r - 从数据库中的多个变量中删除数据框中的行
- sql - 执行 LENGTH(email_address) 后的 NULL 字段
- vala - 使用 Flatpak 在 vala 构建中使用 libsoup 发出获取请求
- android - 在 ListView 中显示两个项目,在 null 对象引用上获取 setAdapter()
- reactjs - How to disable autofocus of multiple material-ui popover windows?
- vue.js - 访问每个组件中的颜色变量
- python - 需要线程来阻止下一个代码行但不是其他线程
- groovy - Micronaut CompileStatic JSON 对象 - 静态类型检查 - 没有这样的属性:类的 bookid:java.lang.Object
- ms-word - 将表格从一个 Word 文档复制并粘贴到另一个 SAS DDE