【问题标题】:How to fix this java.lang.ClassCastException: [B cannot be cast to java.util.List如何修复此 java.lang.ClassCastException:[B 无法转换为 java.util.List
【发布时间】:2019-01-08 16:54:25
【问题描述】:

我正在用 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() 转换为List&lt;byte[]&gt;,似乎in.readObject() 正在返回byte[]
  • 那我该怎么办呢?
  • 将其转换为 byte[] 或更改源文件的写入方式
  • in.readObject 正在返回 Object

标签: java classcastexception


【解决方案1】:

您正在尝试将您的 in.readObject() 文件转换为列表

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

您可以这样做:

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

Array.asList() 会将您的字节基元数组转换为列表(我假设您使用的是字节基元,而不是基于您的代码的 Byte 类)。在 Java 中不能简单地将 Array 转换为 List。

【讨论】:

    【解决方案2】:

    你可以写:

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

    这应该会有所帮助

    【讨论】:

    • 它应该是字节而不是字节。谢谢我知道了@Mykhailo Moskura
    • 抱歉打错了)
    • 没关系,我知道并明白了你的想法。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2016-09-05
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多