加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

FileOutputStream与FileInputStream的随机访问文件读写

发布时间:2021-05-23 09:04:14 所属栏目:编程 来源:互联网
导读:FileOutputStream 因为流是单向的,简朴文件写可行使FileOutputStream,而读文件则行使FileInputStream。 任何数据输出到文件都是以字节为单元输出,包罗图片、
副问题[/!--empirenews.page--]

因为流是单向的,简朴文件写可行使FileOutputStream,而读文件则行使FileInputStream。

任何数据输出到文件都是以字节为单元输出,包罗图片、音频、视频。以图片为例,假如没有图片名目理会器,那么图片文件着实存储的就只是按某种名目存储的字节数据而已。

FileOutputStream指文件字节输出流,用于将字节数据输出到文件,仅支持次序写入、支持以追加方法写入,但不支持在指定位置写入。

打开一个文件输出流并写入数据的示例代码如下。

public class FileOutputStreamStu{ 

    public void testWrite(byte[] data) throws IOException {                     

        try(FileOutputStream fos = new FileOutputStream("/tmp/test.file",true)) { 

            fos.write(data); 

            fos.flush(); 

        } 

    } 

留意,假如不指定追加方法打开流,new FileOutputStream时会导致文件内容被清空,而FileOutputStream的默认构建函数是以非追加模式打开流的。

FileOutputStream的参数1为文件名,参数2为是否以追加模式打开流,假如为true,则字节将写入文件的尾部而不是开头。

挪用flush要领目标是在流封锁之前清空缓冲区数据,现实上行使FileOutputStream并不必要挪用flush要领,此处的刷盘指的是将缓存在JVM内存中的数据挪用体系函数write写入。如BufferedOutputStream,在挪用BufferedOutputStream要领时,假如缓存未满,现实上是不会挪用体系函数write的,如下代码所示。

public class BufferedOutputStream extends FilterOutputStream { 

    public synchronized void write(byte b[], int off, int len) throws IOException { 

        if (len >= buf.length) { 

            flushBuffer(); 

            out.write(b, off, len); 

            return; 

        } 

        if (len > buf.length - count) { 

            flushBuffer(); 

        } 

        System.arraycopy(b, off, buf, count, len); // 只写入缓存 

        count += len; 

    } 

FileInputStream

FileInputStream指文件字节输入流,用于将文件中的字节数据读取到内存中,仅支持次序读取,不行跳跃读取。

打开一个文件输入流读取数据的案例代码如下。

public class FileInputStreamStu{ 

    public void testRead() throws IOException {     

        try (FileInputStream fis = new FileInputStream("/tmp/test/test.log")) { 

            byte[] buf = new byte[1024]; 

            int realReadLength = fis.read(buf); 

        } 

    } 

个中buf数组中下标从0到realReadLength的字节数据就是现实读取的数据,假如realReadLength返回-1,则声名已经读取到文件尾而且未读取到任何数据。

虽然,我们还可以一个字节一个字节的读取,如下代码所示。

public class FileInputStreamStu{ 

    public void testRead() throws IOException {      

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读