在java中使用ReadFully

时间:2014-06-23 16:34:34

标签: java

我在java中使用Readfully来读取文件。以下代码说明了这一点。

import java.io.*;

public class RandomAccessFileDemo {
    public static void main(String[] args) {
      try {
         // create a string and a byte array

         // create a new RandomAccessFile with filename test
             RandomAccessFile raf = new RandomAccessFile("/home/mayank/Desktop/Image/Any.txt", "rw");


             // set the file pointer at 0 position
             raf.seek(0);
             int Length = (int)raf.length();

             // create an array equal to the length of raf
             byte[] arr = new byte[Length];

             // read the file
             raf.readFully(arr,0,Length);

             // create a new string based on arr
             String s2 = new String(arr);

             // print it
             System.out.println("" + s2);

             } catch (IOException ex) {
             ex.printStackTrace();
          }
       }
}

Any.txt的内容为Hello World!! 上面的代码打印Hello World!!

但是当我改变

raf.readFully(arr,0,Length);

 raf.readFully(arr,3,Length-3);

我没有得到输出lo World!!,而是没有错误。

任何人都可以解释我如何使用。 或者如何获得输出lo World!!

2 个答案:

答案 0 :(得分:1)

默认情况下,

readFully将从文件中的当前位置开始读取。要跳过前三个字符,请使用:

raf.skipBytes(3);

在使用readFully之前。也没有理由使用偏移量,因此请使用:

raf.readFully(arr,0,Length - 3);

事情会很好。

重要说明:这假设前3个字符只是一个字节,不一定是某些字符集的情况。但由于这可能是一个开始的家庭作业或教程,这可能是你正在寻找的答案。

答案 1 :(得分:1)

根据javadoc,readFully(byte[] b, int off, int len)的off和len参数会影响raf数据放置在字节数组中的位置,而不会影响读取raf数据的数量。在所有情况下,文件的其余部分都被完全读取。

  

如果b为null,则抛出NullPointerException。如果关闭是否定的,或者   len是负数,或者off + len大于数组b的长度,   然后抛出IndexOutOfBoundsException。如果len为零,则为no   读取字节。否则,读取的第一个字节存储在元素中   b [off],下一个进入b [off + 1],依此类推。字节数   read最多等于len。

试试这个:

raf.skipBytes(3);
raf.readFully(arr,3,Length-3);