使用字节数组

时间:2012-11-10 21:01:31

标签: java arrays byte

以下代码将char存储到byte时出现编译错误。如何将fin.read()函数读取的字节存储到字节数组中并打印出来?

import java.io.FileInputStream;

class IO {
    public static void main(String args[]) {
        int i;
        int j = 0;
        FileInputStream fin = new FileInputStream("file.txt");
        byte[] b = new byte[100];
        do {
            i = fin.read();
            j++;
            b[j] = (char) i;
        } while (i != -1);
        System.out.println(b);
    }
}

输出:

possible loss of precision
found   : char
required: byte
            b[j] =(char) i;
                  ^
1 error

如何让它发挥作用? 将文件读入字节数组,然后显示?

5 个答案:

答案 0 :(得分:2)

您可以使用InputStream.read(byte [])

直接读取字节数组

答案 1 :(得分:1)

将以下行b[j] = (char) i;更改为b[j] = (byte) i;

它会给你另一个编译器错误。但第一个问题将得到解决。

第一个不起作用,因为Java为char类型使用Unicode,因此它有两个字节。您将int值转换为char,但之后尝试将其分配给byte变量,为此您必须明确转换为byte,这不是C也不再是C ++。

您还可以考虑使用更简单的方法fin.read(b),在您的情况下读取最多100个字节,并在达到EOF时返回-1。这样您就不必将i明确地投射到byte

例如:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

class IO {
    public static void main(String args[]) {
        byte[] b = new byte[100];
        try (FileInputStream fin = new FileInputStream("file.txt");) {
            while (true) {
                int i = fin.read(b);
                if (i < 0) {
                    break;
                }
                if (i < b.length) {
                    b = Arrays.copyOf(b, i);
                }
                System.out.println(Arrays.toString(b));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 2 :(得分:1)

读取文件并打印出来:

    File file = new File("C:\\MyFile.txt");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
      fis = new FileInputStream(file);

      // Here BufferedInputStream is added for fast reading.
      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      // dis.available() returns 0 if the file does not have more lines.
      while (dis.available() != 0) {

      // this statement reads the line from the file and print it to
        // the console.
        System.out.println(dis.readLine());
      }

      // dispose all the resources after using them, you need to move this to the finally block and check for null!!
      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

答案 3 :(得分:1)

尝试使用FileUtils.readFileToByteArray(file)中的方法Apache Commons IO。它比手工编写代码更直接。

答案 4 :(得分:1)

对于您的问题,答案很简单。您正在将int转换为char,但您希望将其存储为byte。因此,您必须在对话期间将其转换为字节。即

import java.io.*;
class IO{
public static void main(String args[]){
    int i;
    int j=0;
    FileInputStream fin = new FileInputStream("file.txt");
    byte[] b = new byte[100];
    do{
        i= fin.read();
        j++;
        b[j] =(byte) i;
    }while( i != -1);
    System.out.println(b);
}

}

此外,您不需要将其作为int读取。直接读作char或byte。