Как исправить это исключение java.lang.ClassCastException: [B не может быть приведено к java.util.List - PullRequest
0 голосов
/ 08 января 2019

Я создаю программное обеспечение для цифровой подписи на 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 голосов
/ 08 января 2019

Вы пытаетесь преобразовать файл in.readObject() в список

Это не работает в Java, поскольку файл записывается в виде byte [] Структура данных массива, а не список массивов. Вам нужно будет преобразовать массив byte [] в список, прежде чем сделать его значением для this.list2.

Вот как вы можете это сделать:

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

Array.asList() преобразует ваш массив байтовых примитивов в список (я предполагаю, что вы используете байтовые примитивы, а не класс байтов здесь на основе вашего кода). Невозможно просто привести массив к списку в Java.

0 голосов
/ 08 января 2019

Вы можете написать:

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

Это должно помочь

...