日期:2014-05-20  浏览次数:20711 次

关于read方法的一点小问题。。。求大虾!
/*
需求:使用RandomAccessFile实现一下要求:
  1 存取基本数据类型
  2 随机读取某段位置的内容(一般内容都有规律)
  3 随即在某段位置上写一段数据
  4 修改某一段位置的内容
  5 使用其中的读写模式参数创建文件
思路:5 构造函数告诉我们,RandomAccessFile只能接收文件类型的参数
  其中文件类型可以是文件对象,也可以是字符串表示的文件名;
  同时当传入的读写模式参数为只读时,当文件存在时,不会创建,只会读取,
  当文件不存在时,抛出异常;
  当传入的读写模式参数为读写时,文件不存在则创建文件对象,存在也不会覆盖该文件
  readInt()读取一个字节内容
  seek(8);将文件指针指向角标为8的位置;
   
步骤:
*/
package randomaccessfile;
import java.io.*;
class RandomAccessFileTest
{
public static void main(String []args)throws IOException
{
writeFile();
}
public static void writeFile()throws IOException
{
RandomAccessFile raf=new RandomAccessFile("random.txt","rw");
raf.seek(8);
raf.write("李四".getBytes());
raf.writeInt(23);
raf.seek(8);
byte[] buf=new byte[4];
raf.read(buf);//这里不是要有个int型参数来接受返回值吗?没有怎么也可以编译通过啊,求解释!
String name=new String(buf);
System.out.println(name+p);
System.out.println(raf.readInt());
raf.close();

}
}
问题在注释。。。read方法的返回值

------解决方案--------------------
方法的返回值不一定要接受的,不接受编译不会报错。
但你这里最好要接收了判断下,你看API

read的返回:
读入缓冲区的总字节数,如果由于已到达此文件的末尾而不再有数据,则返回 -1。

也就是说,
1)你传得buf不一定被写满(4个字节)
2)可能已到尾部,返回是-1。

例如其他方法。
File的delete。也有返回值,返回删除成功与否。
如果你只是想删除,不管他删成功否,就可以完全不接受它的返回值。
其实有返回值的情况,最好查看API文档后,再决定。
对你有用的,那么接受,再做处理。 对你功能上没有影响的可以不接受。