如何解决此 java.lang.ClassCastException:[B 无法转换为 java.util.List
How to fix this java.lang.ClassCastException: [B cannot be cast to java.util.List
我正在 Java 中创建一个数字签名软件,我想要该软件使用参数(字符串文件名、字符串密钥文件)验证消息。
但是我在
行遇到了这个异常
this.list2 = (List<byte[]>) in.readObject();
java.lang.ClassCastException: [B cannot be cast to java.util.List. How
to solve this?
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.");
}
你可以这样写:
this.list2=Arrays.asList((byte[])in.readObject());
这应该有帮助
You are trying to cast your in.readObject()
file to a List
这在 Java 中不起作用,因为该文件被写为 byte[] 数组数据结构,而不是数组列表。您必须先将 byte[] 数组转换为列表,然后再将其设为 this.list2
的值。
这里是你如何做到的:
this.list2 = Arrays.asList((byte[])in.readObject());
Array.asList()
会将您的字节基元数组转换为列表(根据您的代码,我假设您使用的是字节基元而不是此处的字节 class)。在 Java 中不可能简单地将数组转换为列表。
我正在 Java 中创建一个数字签名软件,我想要该软件使用参数(字符串文件名、字符串密钥文件)验证消息。 但是我在
行遇到了这个异常this.list2 = (List<byte[]>) in.readObject();
java.lang.ClassCastException: [B cannot be cast to java.util.List. How to solve this?
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.");
}
你可以这样写:
this.list2=Arrays.asList((byte[])in.readObject());
这应该有帮助
You are trying to cast your
in.readObject()
file to a List
这在 Java 中不起作用,因为该文件被写为 byte[] 数组数据结构,而不是数组列表。您必须先将 byte[] 数组转换为列表,然后再将其设为 this.list2
的值。
这里是你如何做到的:
this.list2 = Arrays.asList((byte[])in.readObject());
Array.asList()
会将您的字节基元数组转换为列表(根据您的代码,我假设您使用的是字节基元而不是此处的字节 class)。在 Java 中不可能简单地将数组转换为列表。