1

我正在使用 FileInputStream 从类文件中读取字节,以便从中获取所有 4 个字符字符串(字符串是指与 ASCII 码中的字母或数字相对应的任何 4 个字节序列)。我想将它们保存在大小为 4 的临时数组(或 ArrayLists)中,然后将它们放入一个更大的 ArrayList 中。但是,我坚持将读取的字节(FileInputStream 返回我的 int,它是字节的十进制值)再次转换为字节,以便使用 String 构造函数( String(byte[] bytes) )。

public static void main(String[] args){
    ArrayList<String> dozapisu = new ArrayList<String>();
    ArrayList<Byte> temp = new ArrayList<Byte>();
    int c;
    File klasowe = new File("C:/Desktop/do testu/Kalendarz.class");
    try{
        FileInputStream fis = new FileInputStream(klasowe);
        while((c=fis.read()) != -1){
            if((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)){
                temp.add(new Byte((byte) c));
            }else{
                if(temp.size()==4){
                //  dozapisu.add(*/How should I add them?/*);
                }
            }
        }


        fis.close();
    }catch(IOException exc) {
        System.out.println(exc.toString());
        System.exit(1);
    } 
}

所以,我的问题是如何将那些读取的整数再次转换为字节。请原谅我糟糕的英语,如果您不明白我的问题,请要求更多翻译。

4

1 回答 1

2

你可以这样做:

byte [] bytes = new byte[4];
int counter = 0;
while((c = fis.read()) != -1){
    if((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)){
        bytes[counter] = (byte)c;
        counter++;
        if(counter == 4){
            // do things with 4 byte array
            counter = 0;
        }
    }
}

如果我没记错的话,你需要上面的东西,对吧?

我认为使用字节数组会比使用列表更好。只需跟踪已填充多少字节数组。当它变成数组中的 4 字节时,处理完整的 4 字节数组,然后重置数组的计数器。

编辑:

要从字节创建字符串,您可以使用:

byte [] bytes = new byte[4];
int counter = 0;
while((c = fis.read()) != -1){
    if((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)){
        bytes[counter] = (byte)c;
        counter++;
        if(counter == 4){
            // do things with 4 byte array
            String str = new String(bytes);
            counter = 0;
        }
    }
}

字符串 str 将从四个字节创建。那是你需要的吗?

于 2013-10-12T13:39:57.547 回答