字节流读取数据两种方式比较

2024-06-11 05:32

本文主要是介绍字节流读取数据两种方式比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

字节流读取数据两种方式比较

█ 一次读取一个字节

█ 一次读取一个字节数组

       ☞每次可以读取多个数据,提高了操作效率

public class CopyDemo {

//第一步:将1.txt中的内容读入到内存            FileInputStream

//第二步:将内存中读入的数据读入到2.txt      FileOutputStream

//使用字节流来copy东西不会出现乱码,因为是把所有东西照搬过去,没有拿出来解析

public static void main(String[] args) throws IOException {

                FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");    //任何文件格式都可以拷贝

                FileOutputStream fos = new FileOutputStream("kaobei.mp4");

//方法一:  效率低下,一次一个字节

/*             int b = 0;

                while((b = fis.read()) != -1){

                        fos.write(b);

                }*/

//方法二:  效率高,一次整个数组

                byte[] bytes = new byte[1024];

                int len = 0;

                while((len = fis.read(bytes)) != -1){

                        fos.write(bytes,0,len);

                }

                fis.close();

                fos.close();               

        }

}

 

字节缓冲流    ( 包装流,加入了一些缓冲区 8092 byte )

 

█ 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的情况,所以提供了字节缓冲区流

█ 字节缓冲输出流

        ☞BufferedOutputStream

            BufferedInputStream(InputStream in);           //缓冲区大小默认是8192

创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

            BufferedInputStream(InputStream in, int size); 

创建具有指定缓冲区大小的

 

█ 字节缓冲输入流

        ☞BufferedInputStream

           BufferedOutputStream(OutputStream out);        

创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

           BufferedOutputStream(OutputStream out, int size);        

创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

 

public class BufferTestMain {

        public static void main(String[] args) throws IOException {

                FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");  

// 这样的fis不带缓冲区

                BufferedInputStream bfis = new BufferedInputStream(fis);

                FileOutputStream fos = new FileOutputStream("kaobei.mp4");

                BufferedOutputStream bfos = new BufferedOutputStream(fos);

 

// 方法一:

/*             int b = 0;

                while ((b = bfis.read()) != -1) { 

 //看上去是一个字节一个字节的读,其实系统实现是一次读 8192 个字节到缓冲区

                        bfos.write(b);

                }*/

// 方法二:更快,缓冲区自带一个8192缓冲区,自己还定义了一个1024的缓冲区       

                byte[] bytes = new byte[1024];

                int len = 0;

                while ((len = bfis.read(bytes)) != -1) {

                        bfos.write(bytes, 0, len);

                }

        }

}

这篇关于字节流读取数据两种方式比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050316

相关文章

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.