Java Compiler认为byte []是String

时间:2017-05-20 18:54:07

标签: java string compiler-errors byte

我不明白为什么java.lang.String不能在byte []中转换。

在线:

byte[] decData = io.decrypt(fileData, new Random(fileData.length));

我的编译器说:java.lang.String不能在byte []

中转换

但我像这样初始化fileData:

byte[] fileData = new byte[fIn.available()];

io.decrypt定义如下:

public static String decrypt(byte[] data, Random key) {
    byte[] byteKey = new byte[data.length];
    key.nextBytes(byteKey);
    return decrypt(data, byteKey);
}

Random是java.util.Random

所以我不明白为什么我做错了。

顺便说一句:我正在尝试制作一个简单的XOR en / de-crypter

这是完整的代码:

    Boolean decrypt = praseBoolean(Greenfoot.ask("decrypt? (y/n)"));

    //Random rand = new Random();

    if(!decrypt) {
        File folder = new File("decrypted");
        File[] toEncrypt = folder.listFiles();
        //Long[] keys = 
        for(File file: toEncrypt) {
            FileInputStream fIn = new FileInputStream(file);
            byte[] fileData = new byte[fIn.available()];
            fIn.read(fileData);
            byte[] encData = io.encrypt(fileData, new Random(fileData.length));
            io.saveEncryptedFile(encData, "encrypted/"+file.getName());
        }
    }

    if(decrypt) {
        File folder = new File("encrypted");
        File[] toEncrypt = folder.listFiles();
        //Long[] keys = 
        for(File file: toEncrypt) {
            FileInputStream fIn = new FileInputStream(file);
            byte[] fileData = new byte[fIn.available()];
            fIn.read(fileData);
            byte[] decData = io.decrypt(fileData, new Random(fileData.length));
            io.saveEncryptedFile(encData, "decrypted/"+file.getName());
        }
    }

3 个答案:

答案 0 :(得分:2)

io.decrypt会返回String,但您会将结果分配给byte[]。所以把它改成

byte[] decData = io.decrypt(fileData, new Random(fileData.length)).getBytes();

String decData = io.decrypt(fileData, new Random(fileData.length));

答案 1 :(得分:1)

decrypt会返回String,但您尝试将其分配给byte[] decData。只需将它分配给String,你就可以了:

String decData = io.decrypt(fileData, new Random(fileData.length));

答案 2 :(得分:1)

您的解密方法返回String。如果要从中获取字节数组,请在方法的结果上使用string.getBytes(),或者首先返回一个字节数组。