RandomAccessFile类如何使用randomAccessFile.read()方法返回字节;

时间:2014-03-13 10:37:58

标签: java bytearray randomaccessfile

我使用谷歌翻译,我希望这个问题能够很好地理解。

有一件事我不理解随机访问文件。不了解程序是如何工作的但是有效。

这是我的计划:

// ---------------------------------------------
RandomAccessFile RandomAccessFile = new RandomAccessFile ( " pathfile ", " r");

byte [] document = new byte [ ( int) randomAccessFile.length ()] ;

randomAccessFile.read (document) ;
// ---------------------------------------------

在第1行中,我以read方式访问该文件 在第2行中,我创建了一个与文件大小相同的字节数组对象 在第3行中读取字节数组

但永远不会转储字节数组上的文件。

我认为该程序应该类似于:

/ / ---------------------------------------------
RandomAccessFile RandomAccessFile = new RandomAccessFile ( " pathfile ", " r");

byte [] document = new byte [ ( int) randomAccessFile.length ()] ;

// Line changed
document = randomAccessFile.read();
// ---------------------------------------------

java文档说:

randomAccessFile.read() ;

Reads a byte of data from this file . The byte is returned as an integer in
the range 0 to 255 ( 0x00- 0x0ff ) .

仅返回字节数,但不返回字节。

有人可以向我解释这行如何使用此语句转储byte []变量文档中的字节?

randomAccessFile.read (document) ;

谢谢!

// --------------------------------------------- ---------------------------------

另一个例子:

我将此方法与BufferedReader进行比较:

File file = new File ("C: \ \ file.txt"); 
FileReader fr = new FileReader (file); 
BufferedReader br = new BufferedReader (fr); 
... 
String line = br.readLine (); 

BufferedReader读取一行并将其传递给字符串。

我可以看到这个java语句将文件内容传递给变量。

String line = br.readLine ();

但我没有看到其他声明:

RandomAccessFile.read ();

刚读完,内容没有在任何地方传递那条线......

2 个答案:

答案 0 :(得分:4)

您应该使用readFully

    try (RandomAccessFile raf = new RandomAccessFile("filename", "r")) {
        byte[] document = new byte[(int) raf.length()];
        raf.readFully(document);
    }

编辑:您已澄清了您的问题。你想知道为什么read没有"返回"文件的内容。内容如何到达那里?

答案是read没有分配任何内存来存储文件的内容。你用new byte[length]做到了。这是文件内容的存储空间。然后调用read并告诉它将文件的内容存储在您创建的这个字节数组中。

BufferedReader.readLine不会像这样运行,因为只知道每行需要读取多少字节,所以让你自己分配它们是没有意义的。

"如何":

的快速示例
class Test {
    public static void main(String args[]) {
        // here is where chars will be stored. If printed now, will show random junk
        char[] buffer = new char[5];

        // call our method. It does not "return" data.
        // It puts data into an array we already created.
        putCharsInMyBuffer(buffer);

        // prints "hello", even though hello was never "returned"
        System.out.println(buffer);
    }

    static void putCharsInMyBuffer(char[] buffer) {
        buffer[0] = 'h';
        buffer[1] = 'e';
        buffer[2] = 'l';
        buffer[3] = 'l';
        buffer[4] = 'o';
    }
}

答案 1 :(得分:1)

randomAccessFile.read (document) ;

此方法将读取否。来自文件的字节数,即文档数组长度的长度 如果文档数组的长度是1024字节,它将从文件中读取1024个字节并将其放在数组中。

Click here For Documentation of this method

document = randomAccessFile.read () ;

只会读取文件中的一个字节并将其返回,它将无法读取您的整个文件。

Click here for Documentation of this method