Java read(buf[]) 是每一次哭都笑着奔跑都会读到buf字节么?

java中的FileInputStream类中的read()方法是读取一个数据字节,那么读取完一个字节后还会自动读取下一个_百度知道
java中的FileInputStream类中的read()方法是读取一个数据字节,那么读取完一个字节后还会自动读取下一个
该类意思是:从InputStream中派生出来的简单输入类。一、构造方法FileInputStream(String name);
//使用给定的文件名创建对象FileInputStream(File file);
//使用File对象创建FileInputStream对象二、读取文件1.使用文件输入流读取文件FileInuputStream istream=new FileInputStream(&myfile.dat&);或:File f=new File(&myfile.dat&);FileInputStream istream=new FileInputStream(f);构造方法可能会产生异常IOException,故为了把一个文件输入流对象与一个文件关联起来,需:try { FileInputStream ins=new FileInputStream(&myfile.dat&);}catch (IOException e){ System.out.println(&File read error:&+e);}2.从输入流中读取字节int read();
//从输入流中读取单个字节数据(0~255),如到输入流末尾则返回-1int read(byte b[]);
//读多个字节int read(byte b[],int off,int len);3.关闭流Java在程序结束时自动关闭所有打开的流,但显式关闭任何打开的流是一个好习惯。close();
其他类似问题
为您推荐:
创建字节数组
int length = 0, 0.read(bufferread只会读取一个字节 不会自动读取下一个 只会读第一个字节 和指针不是一回事如果想用字节流读完文件 一般用一个字节数组的缓冲区 比如200byte[] buffer = new byte[200]!= (length =/&#47.println(str).length))){
String str = new String(buffer, buffer.
System,0,length);
其他2条回答
读出来的是一个一个的byteread()需要写循环方法才能把数据挨着读出来。与指针没关系。
是的,read()方法每读一下,他会默认指向下一个字节
fileinputstream的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在Java中的io流中,read读取文件时,读取完了没有了返回-1,(为什么不是0啊?没有了就是0啊?)_百度知道
在Java中的io流中,read读取文件时,读取完了没有了返回-1,(为什么不是0啊?没有了就是0啊?)
public class Copy{public static void main(String arg[]){FileInputStream fis=new FileInputStream(&quot。.flv&&#47你说的是java IO读取文件复制问题;while(i=fis.priontln(&).read().close()!=-1){fis.out.read(buf);假定这是一个视频文件byte[]buf=new byte[1024]; }S)/文件复制完毕&int i=-1,我这有个例子希望能帮助你?我也不知道你说的神马
如果那个-1改为0,还是一样的吗?
恩恩,一样的-1代表文件已经读到末尾读完啦,个跟你写的那个 int=-1没关系的但是在while循环中的 -1 是代表文件末尾这个不能变
其他类似问题
为您推荐:
其他2条回答
读到最后一个没有的时候就数组越界异常,read字节数组的时候返回-1是对的啊,-1就是不在数组的索引值范围内
java就是这么定义的,如果非要问为什么的话,请看java源代码(ctrl+左键放到read上,就会跟进到源代码,不过事先得先关联源代码,一般的话,eclipse都已经关联好)。望采纳。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请问我的程序为啥每次复制文件都会少一点字节(java代码如下)_百度知道
请问我的程序为啥每次复制文件都会少一点字节(java代码如下)
println(&quot.sql&quot.ioimport java.read(); ops.close();
} success&quot.write((fis.io.import java.IOException.FileOutputS\ S).sql&quot.close();\ while((fis.read()))!=-1)){
);d;cloud_note:\D; FileInputStream fis=new FileInputStream(&quot:&#92.FileInputStream.);public class aa {public static void main(String[] args) throws IOException { FileOutputStream ops=new FileOutputStream(&quot
write(i)!=-1){
ops.read());while((i=fis.read()读了1个int i因为while里面的 }一个个读效率很慢的
来自团队:
其他类似问题
为您推荐:
其他2条回答
while ((len=fis!=-1){
opsbyte []buf=new byte[1024],0.writer(buf.read(buf));int len,len)
ops.flush();
close里面包含flush 而且加上了貌似也没啥用
...int&b&=&-1;while((b=fis.read())!=-1)){
ops.write(b); } ops.flush(); ...
java的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写
其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后)
对于文件内容的操作主要分为两大类
  字符流
  字节流
其中,字符流有两个抽象类:Writer & Reader
其对应子类FileWriter和FileReader可实现文件的读写操作
BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率
同样,字节流也有两个抽象类:InputStream & OutputStream
其对应子类有FileInputStream和FileOutputStream实现文件读写
BufferedInputStream和BufferedOutputStream提供缓冲区功能
俺当初学IO的时候犯了不少迷糊,网上有些代码也无法通过编译,甚至风格都很大不同,所以新手请注意:& & & &
&&&&&&& 1.本文代码较长,不该省略的都没省略,主要是因为作为一个新手需要养成良好的代码编写习惯
   2.本文在linux下编译,类似于File.pathSeparator和File.separator这种表示方法是出于跨平台性和健壮性考虑
   3.代码中有些操作有多种执行方式,我采用了方式1...方式2...的表述,只需轻轻解开注释便可编译
   4.代码中并没有在主方法上抛出异常,而是分别捕捉,造成代码过长,如果仅是测试,或者不想有好的编程习惯,那你就随便抛吧&&
&&&&&&& 5.功能类似的地方就没有重复写注释了,如果新手看不懂下面的代码,那肯定是上面的没有理解清楚
实例1:字符流的写入
import java.io.F
import java.io.FileW
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
//创建要操作的文件路径和名称
//其中,File.separator表示系统相关的分隔符,Linux下为:/
Windows下为:\\
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
//由于IO操作会抛出异常,因此在try语句块的外部定义FileWriter的引用
FileWriter w =
//以path为路径创建一个新的FileWriter对象
//如果需要追加数据,而不是覆盖,则使用FileWriter(path,true)构造方法
w = new FileWriter(path);
//将字符串写入到流中,\r\n表示换行想有好的
w.write("Nerxious is a good boy\r\n");
//如果想马上看到写入效果,则需要调用w.flush()方法
w.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
//如果前面发生异常,那么是无法产生w对象的
//因此要做出判断,以免发生空指针异常
if(w != null) {
//关闭流资源,需要再次捕捉异常
w.close();
} catch (IOException e) {
e.printStackTrace();
编译之后,在目录下面生成文件,并写入字符串
实例2:字符流的读取
import java.io.F
import java.io.FileR
import java.io.IOE
public class Demo2 {
public static void main(String[] args ) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
FileReader r =
r = new FileReader(path);
//方式一:读取单个字符的方式
//每读取一次,向下移动一个字符单位
int temp1 = r.read();
System.out.println((char)temp1);
int temp2 = r.read();
System.out.println((char)temp2);
//方式二:循环读取
//read()方法读到文件末尾会返回-1
while (true) {
int temp = r.read();
if (temp == -1) {
System.out.print((char)temp);
//方式三:循环读取的简化操作
//单个字符读取,当temp不等于-1的时候打印字符
/*int temp = 0;
while ((temp = r.read()) != -1) {
System.out.print((char)temp);
//方式四:读入到字符数组
char[] buf = new char[1024];
int temp = r.read(buf);
//将数组转化为字符串打印,后面参数的意思是
//如果字符数组未满,转化成字符串打印后尾部也许会出现其他字符
//因此,读取的字符有多少个,就转化多少为字符串
System.out.println(new String(buf,0,temp));
//方式五:读入到字符数组的优化
//由于有时候文件太大,无法确定需要定义的数组大小
//因此一般定义数组长度为1024,采用循环的方式读入
char[] buf = new char[1024];
int temp = 0;
while((temp = r.read(buf)) != -1) {
System.out.print(new String(buf,0,temp));
} catch (IOException e) {
e.printStackTrace();
} finally {
if(r != null) {
r.close();
} catch (IOException e) {
e.printStackTrace();
编译之后的效果:
实例3:文本文件的复制
import java.io.F
import java.io.FileR
import java.io.FileW
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String doc = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
String copy = File.separator + "home" + File.separator + "siu" +
File.separator + "life" + File.separator + "lrc.txt";
FileReader r =
FileWriter w =
r = new FileReader(doc);
w = new FileWriter(copy);
//方式一:单个字符写入
int temp = 0;
while((temp = r.read()) != -1) {
w.write(temp);
//方式二:字符数组方式写入
char[] buf = new char[1024];
int temp = 0;
while ((temp = r.read(buf)) != -1) {
w.write(new String(buf,0,temp));
} catch (IOException e) {
e.printStackTrace();
} finally {
//分别判断是否空指针引用,然后关闭流
if(r != null) {
r.close();
} catch (IOException e) {
e.printStackTrace();
if(w != null) {
w.close();
} catch (IOException e) {
e.printStackTrace();
&编译之后,产生life目录下的lrc.txt文件,复制成功
实例4:利用字符流的缓冲区来进行文本文件的复制
import java.io.BufferedR
import java.io.BufferedW
import java.io.F
import java.io.FileR
import java.io.FileW
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String doc = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
String copy = File.separator + "home" + File.separator + "siu" +
File.separator + "life" + File.separator + "lrc.txt";
FileReader r =
FileWriter w =
//创建缓冲区的引用
BufferedReader br =
BufferedWriter bw =
r = new FileReader(doc);
w = new FileWriter(copy);
//创建缓冲区对象
//将需要提高效率的FileReader和FileWriter对象放入其构造函数内
//当然,也可以使用匿名对象的方式 br = new BufferedReader(new FileReader(doc));
br = new BufferedReader(r);
bw = new BufferedWriter(w);
String line =
//读取行,直到返回null
//readLine()方法只返回换行符之前的数据
while((line = br.readLine()) != null) {
//使用BufferWriter对象的写入方法
bw.write(line);
//写完文件内容之后换行
//newLine()方法依据平台而定
//windows下的换行是\r\n
//Linux下则是\n
bw.newLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
//此处不再需要捕捉FileReader和FileWriter对象的异常
//关闭缓冲区就是关闭缓冲区中的流对象
if(br != null) {
r.close();
} catch (IOException e) {
e.printStackTrace();
if(bw != null) {
bw.close();
} catch (IOException e) {
e.printStackTrace();
实例5:字节流的写入
import java.io.F
import java.io.FileOutputS
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
FileOutputStream o =
o = new FileOutputStream(path);
String str = "Nerxious is a good boy\r\n";
byte[] buf = str.getBytes();
//也可以直接使用o.write("String".getBytes());
//因为字符串就是一个对象,能直接调用方法
o.write(buf);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(o != null) {
o.close();
} catch (IOException e) {
e.printStackTrace();
编译之后产生的文件,以上在字符串中加\r\n就是为了便于终端显示
其实在linux下面换行仅用\n即可
实例6:字节流的读取
import java.io.F
import java.io.FileInputS
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
FileInputStream i =
i = new FileInputStream(path);
//方式一:单个字符读取
//需要注意的是,此处我用英文文本测试效果良好
//但中文就悲剧了,不过下面两个方法效果良好
int ch = 0;
while((ch=i.read()) != -1){
System.out.print((char)ch);
//方式二:数组循环读取
byte[] buf = new byte[1024];
int len = 0;
while((len = i.read(buf)) != -1) {
System.out.println(new String(buf,0,len));
//方式三:标准大小的数组读取
//定一个一个刚好大小的数组
//available()方法返回文件的字节数
//但是,如果文件过大,内存溢出,那就悲剧了
//所以,亲们要慎用!!!上面那个方法就不错
byte[] buf = new byte[i.available()];
i.read(buf);
//因为数组大小刚好,所以转换为字符串时无需在构造函数中设置起始点
System.out.println(new String(buf));
} catch (IOException e) {
e.printStackTrace();
} finally {
if(i != null) {
i.close();
} catch (IOException e) {
e.printStackTrace();
&读取文件到终端
实例7:二进制文件的复制
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String bin = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "一个人生活.mp3";
String copy = File.separator + "home" + File.separator + "siu" +
File.separator + "life" + File.separator + "一个人生活.mp3";
FileInputStream i =
FileOutputStream o =
i = new FileInputStream(bin);
o = new FileOutputStream(copy);
//循环的方式读入写出文件,从而完成复制
byte[] buf = new byte[1024];
int temp = 0;
while((temp = i.read(buf)) != -1) {
o.write(buf, 0, temp);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(i != null) {
i.close();
} catch (IOException e) {
e.printStackTrace();
if(o != null) {
o.close();
} catch (IOException e) {
e.printStackTrace();
&复制效果,如图:
&实例8:利用字节流的缓冲区进行二进制文件的复制
import java.io.BufferedInputS
import java.io.BufferedOutputS
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
public class Demo {
public static void main(String[] args ) {
String bin = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "一个人生活.mp3";
String copy = File.separator + "home" + File.separator + "siu" +
File.separator + "life" + File.separator + "一个人生活.mp3";
FileInputStream i =
FileOutputStream o =
BufferedInputStream bi =
BufferedOutputStream bo =
i = new FileInputStream(bin);
o = new FileOutputStream(copy);
bi = new BufferedInputStream(i);
bo = new BufferedOutputStream(o);
byte[] buf = new byte[1024];
int temp = 0;
while((temp = bi.read(buf)) != -1) {
bo.write(buf,0,temp);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bi != null) {
i.close();
} catch (IOException e) {
e.printStackTrace();
if(bo != null) {
o.close();
} catch (IOException e) {
e.printStackTrace();
&两个目录都有 &一个人生活.mp3&文件,顺便说一下,这歌挺好听的
初学者在学会使用字符流和字节流之后未免会产生疑问:什么时候该使用字符流,什么时候又该使用字节流呢?
其实仔细想想就应该知道,所谓字符流,肯定是用于操作类似文本文件或者带有字符文件的场合比较多
而字节流则是操作那些无法直接获取文本信息的二进制文件,比如图片,mp3,视频文件等
说白了在硬盘上都是以字节存储的,只不过字符流在操作文本上面更方便一点而已
此外,为什么要利用缓冲区呢?
我们知道,像迅雷等下载软件都有个缓存的功能,硬盘本身也有缓冲区
试想一下,如果一有数据,不论大小就开始读写,势必会给硬盘造成很大负担,它会感觉很不爽
人不也一样,一顿饭不让你一次吃完,每分钟喂一勺,你怎么想?
因此,采用缓冲区能够在读写大文件的时候有效提高效率
阅读(...) 评论()trackbacks-0
程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身,则需要使用输入/输出流,该类是位于java.io包下的
输入与输出IO:
输入流:只能从中读取数据,而不能向其中写入数据(由InputStream(字节流)和Reader(字符流)作为基类)
输出流:只能向其写入数据,而不能从中读取数据(由OutputStream(字节流)和Writer(字符流)作为基类)
java的io总共涉及40多个类,但都是从这四个抽象基类中派生出来的
InputStream最重要的三个read方法:
Reader中的read方法:
从这两个抽象类提供的方法就可以看出其实功能基本是一样的,只是操作的数据单元不一样而已
由于InputStream与Reader都是抽象类,是不能进行实例化的,我们只能用他们的子类来创建实例,它们分别提供了一个子类用于读取文件的输入流:FileInputStream和
FileReader,这两个子类都是节点流(与处理流相对)-----会直接与指定的文件关联而无包装。下面代码演示FileInputStream使用read(byte[] b):
package xidian.sl.
import java.io.FileInputS
import java.io.FileR
public class InputStreamTest {
* 使用FileInputStream读取该类本身
public static void FileInputStreamTest() throws Exception{
FileInputStream fis = null;
//创建字节输入流
fis = new FileInputStream("src/xidian/sl/io/InputStreamTest.java");
//创建一个长度为1024的字节数组来存取
byte[] bbuf = new byte[1024];
//用于保存实际读取的字节数
int hasRead = 0;
//使用循环来进行重复读取
while((hasRead = fis.read(bbuf))& 0){
//取出字节,将字节数组转化为字符串输出
System.out.println(new String(bbuf, 0 , hasRead));
//关闭文件输入流
fis.close();
* 使用FileReader读取该类本身
public static void FileReaderTest() throws Exception{
FileReader fr = null;
//创建字节输入流
fr = new FileReader("src/xidian/sl/io/InputStreamTest.java");
//创建一个长度为1024的字节数组来存取
char[] bbuf = new char[40];
//用于保存实际读取的字节数
int hasRead = 0;
//使用循环来进行重复读取
while((hasRead = fr.read(bbuf))& 0){
//取出字节,将字节数组转化为字符串输出
System.out.println(new String(bbuf, 0 , hasRead));
//关闭文件输入流
fr.close();
public static void main(String[] args) throws Exception{
InputStreamTest.FileInputStreamTest();
InputStreamTest.FileReaderTest();
可以看到这两个子类的使用方式可以说是完全一样的,不过这里要注意一个问题:字节流FileInputStream是根据字节来读取的,而一个中文是占两个字节的,如果包含很多中文的文件被字节流分多次进行读取,可能会造成乱码,因为有可能会导致刚好将一个中文分两次读取,这样就会乱码了,因此如果中文包含多的话还是使用字符流FileReader比较好,
在字节流与字符流之间选择的规律:如果需要进行输入/输出的内容是文本内容,则应该考虑使用字符流,如果需要进行输入/输出的是二进制内容,则应该考虑使用字节流,因为字节流的功能比字符流强大,计算机中所有的数据都是二进制的,而字节流可以处理所有的二进制文件;
OutputStream中最重要的write方法:
Writer中最重要的write方法:
Writer类中多了两个对字符串的操作类,因此如果是直接输出字符串就选用Writer会比较的方便;
与输入流一样,输出流也有两个文件操作的子类:FileOutputStream和FileWrite
package xidian.sl.
import java.io.FileInputS
import java.io.FileOutputS
import java.io.FileW
public class OutputStreamTest {
* 使用字节流输出
public static void FileOutputStreamTest() throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
//创建字节输入流
fis = new FileInputStream("src/xidian/sl/io/InputStreamTest.java");
//创建字节输出流
fos = new FileOutputStream("src/xidian/sl/io/Output.txt");
byte[] bt = new byte[40];
int hasRead = 0;
//循环从输入流中读取数据
while((hasRead = fis.read(bt))& 0){
//每读取一个,即写入文件输出流,读了多少就写多少
fos.write(bt, 0, hasRead);
}catch (Exception e) {
e.printStackTrace();
* 流在关闭时会自动执行flash,将缓冲中的数据flush到物理节点中
* 所以关闭时很重要的
if(fis != null){
fis.close();
if(fos != null){
fos.close();
* 使用字符流输出字符串会显得比较的方便
public static void FileWriteTest() throws Exception{
FileWriter fw = null;
//创建字节输出流
fw = new FileWriter("src/xidian/sl/io/Output.txt");
fw.write("温州医学院\r\n");
fw.write("信息与管理专业\r\n");
fw.write("温州医学院\r\n");
fw.write("温州医学院\n");
fw.write("温州医学院");
}catch (Exception e) {
e.printStackTrace();
if(fw != null){
fw.close();
public static void main(String[] args) throws Exception{
OutputStreamTest.FileOutputStreamTest();
OutputStreamTest.FileWriteTest();
上面是节点流的基本使用,下面将了解处理流的使用,处理流会显得更加的高效
区分节点流于处理流的方法是:只要流的构造器的参数不是一个物理节点,而是已存在的流,那这个流一定是处理流,因为所有的节点流都是直接以物理io节点作为构造器的参数、
(如file)。
举例:PrintStream处理流来封装FileOutputStream节点流,进行输出,由于PrintStream类的输出功能非常的强大,因此我们需要输出文本内容一般都会将输出流包装成PrintStream后输出
package xidian.sl.
import java.io.FileOutputS
import java.io.PrintS
public class PrintStreamTest {
public static void main(String[] args){
PrintStream ps = null;
//创建一个节点输出流
FileOutputStream fos = new FileOutputStream("src/xidian/sl/io/Output.txt");
//以PrintStream处理流来包装FileOutputStream节点流
ps = new PrintStream(fos);
ps.println("普通字符串");
ps.println(new PrintStreamTest());
}catch (Exception e) {
e.printStackTrace();
ps.close();
其实我们一直使用的标准输出System.out的类型都是PrintStream:
从上面的实例就可以看出将节点流封装成处理流很简单,只需调用处理流的构造方法来传入节点流就可以了;而且看到上面流的关闭只是关闭了处理流而未去关闭节点流,这样做是完全正确的,以后我们在关闭流的时候只需要关闭最上层的处理流即可;
字符流中有两个特别的流来处理字符串的:StringReader和StringWriter,
可以看到使用时实例化只需要传入一个字符串即可:例子:
package xidian.sl.
import java.io.StringR
import java.io.StringW
public class StringNodeTest {
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
String src = "你是个神";
StringReader sr = new StringReader(src);
char[] chars = new char[40];
int hasRead = 0;
//采用循环的方式
while((hasRead = sr.read(chars))&0){
System.out.println(new String(chars, 0, hasRead));
}catch (Exception e) {
e.printStackTrace();
sr.close();
//创建StringWriter
StringWriter sw = new StringWriter(40);
sw.write("你是一个大神");
sw.write("你也是一个大神");
System.out.println(sw.toString());
io系统提供的两个转换流:InputStreamReader和OutputStreamWriter,都是将字节流转化为字符流
在java中是使用System.in来提供键盘输入的,但这个标准输入流是InputStream类的实例:
而前面讲到了当处理的是文本内容时,使用字符流会显得比较方便,正好键盘输入就是文本的操作,因此我们有必须将System.in转换为字符流:
package xidian.sl.
import java.io.BufferedR
import java.io.IOE
import java.io.InputStreamR
public class KeyinTest {
public static void main(String[] args){
BufferedReader br = null;
//将System.in对象转化为Reader对象
InputStreamReader isr = new InputStreamReader(System.in);
//将节点流包装为处理流
br = new BufferedReader(isr);
String buffer = null;
//采用循环的方式一行一行读取
while((buffer = br.readLine()) != null){
System.out.print("输入的内容 = "+ buffer);
}catch (Exception e) {
e.printStackTrace();
br.close();
} catch (IOException e) {
e.printStackTrace();
PrintStream是有强大的输出功能,而BufferReader有强大的输入(即读取),因此在操作读取文本内容时尽可能将其转化为BufferReader,可以方便的使用readLine()方法
&接下来最为强大的文件操作类RandomAccessFile来了,这个类既可以向文件输入数据,也可以输出数据,并且他与不同的流最大的不同就是&支持文件任意位置的访问&,即程序可以控制读取文件哪个位置的内容;
从构造方法上可以看出,除了提供一个文件或文件名外还需要提供一个String参数mode,mode规定了RandomAccessFile类访问文件的模式:
1. &r&:以只读的方式打开指定文件
2. &rw&:以读取,写入方式打开指定文件,并且文件不存在会自动进行创建
3.&rws&与&rwd&:与&rw&类似,只是要求文件内容或元数据的每个更新都同步写入底层存储设备
阅读(...) 评论()}

我要回帖

更多关于 每一次心跳 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信