• 根据数据的走向分为:输入流、输出流
  • 根据处理的数据类型分为:字节流、字符流

IO流中对于图片/文件/视频的复制传输方式,可以采用字节流进行输入输出操作,不同之处在于传输效率上。

以图片传输为例:

1.基础字节流

*使用最基础的字节流(文件输入输出流)进行输入输出操作,每次读/写一个字节。

public static void run4() throws IOException{long begin = System.currentTimeMillis();String imgSuffix = ".jpg";File srcFile = new File("F:\\Test\\imgs\\A.jpg");String newImg = UUID.randomUUID().toString() + imgSuffix;File destFile = new File("F:\\Test\\imgs\\" + newImg);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);int len = 0;while ((len = fis.read()) != -1) {fos.write(len);}fos.close();fis.close();long end = System.currentTimeMillis();long useMills = end - begin;System.out.println("用时" + useMills + "ms");
}

源图片数据放在文件输入流中,读取时按一个字节的方式操作,写入目标图片方式亦同理,如果你的图片是那种超清、大图、好几兆的话,这读写速度颇低。

*使用最基础的字节流(文件输入输出流)进行输入输出操作,每次读/写一个字节数组。

每次读写一个字节,简直是有点慢了。看来,试一把读/写字节数组方式先。

定义一个1024长度的字节数组作为缓冲区间,我们每次读/写1024长度的字节。

public static void run3() throws IOException{long begin= System.currentTimeMillis();String imgSuffix = ".jpg";File srcFile = new File("F:\\Test\\imgs\\A.jpg");String newImg = UUID.randomUUID().toString() + imgSuffix;File destFile = new File("F:\\Test\\imgs\\" + newImg);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) != -1) {fos.write(bytes,0,len);}fos.close();fis.close();long end = System.currentTimeMillis();long useMills = end - begin;System.out.println("用时" + useMills + "ms");
}

2.高效字节流

*使用最高效的字节流进行输入输出操作,每次读/写一个字节。

public static void run2() throws IOException{long begin = System.currentTimeMillis();String imgSuffix = ".jpg";File srcFile = new File("F:\\Test\\imgs\\A.jpg");String newImg = UUID.randomUUID().toString().replace("-", "") + imgSuffix;File destFile = new File("F:\\Test\\imgs\\" + newImg);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));int len = 0;while ((len = bis.read()) != -1) {bos.write(len);bos.flush();}bos.close();bis.close();long end = System.currentTimeMillis();long useMills = end - begin;System.out.println("用时" + useMills + "ms");
}

注:如果在复制文件时,我们突然又不想使用原来文件名了,调用UUID类的randomUUID()方法随机产生名称,保证每次复制过来的图片名称不一样,哈哈哈哈。

这个时候,我们图片复制的效率相对前两种方式已提高很多了,但是Java却不满足于此,基础字节流都可以每次读写一个字节数组,在缓冲区中字节流必然也能够读取字节数组,至此读写效率发生飞跃式提升。

*使用最高效的字节流进行输入输出操作,每次读/写一个字节数组。

public static void run1() throws IOException{long begin = System.currentTimeMillis();String imgSuffix = ".jpg";final String IMG_NAME = "A.jpg";File srcFile = new File("F:\\Test\\imgs\\" + IMG_NAME);if (srcFile.exists()) {for (int i = 0; i < 5; i++) {String newImg = UUID.randomUUID().toString().replace("-", "") + imgSuffix;File destFile = new File("F:\\Test\\imgs\\" + newImg);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));int len = 0;byte[] bytes = new byte[1024];while ((len = bis.read(bytes)) != -1) {bos.write(bytes,0,len);bos.flush();}bos.close();bis.close(); }long end = System.currentTimeMillis();long useMills = end - begin;System.out.println("用时" + useMills + "ms");}
}

愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

(3)I/O流对象-----复制图片/文件/视频的几种I/O流方式相关推荐

  1. 网页嵌入对象(图片、视频、网页)

    在网页中嵌入对象,实际上并不会在网页中插入对象,而是通过某种标签链接到指定的对象,标签创建的只是被引用对象的占位符而已. 嵌入式对象主要包括图片.视频.音频.文档等,不同的对象使用不同的标签,并具有不 ...

  2. java 字符流图片_java 字节流、字符流(复制图片、复制文本)

    1.File 1)构造方法 2)创建 3)判断.获取 4)删除 2.字节流 1)字节流写数据的3种方式 FileOutputStream fos = new FileOutputStream(&quo ...

  3. 腾讯云COS对象存储图片文件API的详细步骤过程

    首先创建一个桶.相当于你存储图片的容器.我这里是存储图片. 我选则是共有读,私有写.因为不选择共有读的话,以后别的地方没办法访问 注意: 公有读权限可以通过匿名身份直接读取您存储桶中的数据,存在一定的 ...

  4. 删除 / 隐藏Win10此电脑窗口的6个文件夹(3D对象、图片、视频、下载等)

    步骤 按下快捷键"Win+R"打开运行,输入regedit并回车 在regedit注册表里,找到以下目录下的的字符串值"ThisPCPolicy",并设置值为H ...

  5. mysql 导出bson格式_mongodb 导入导出GridFS【图片/文件/视频/音频等多媒体文件的导入导出】...

    其实导入导出GridFS和其他集合一样,只是GridFS有files和chunks两个 1.进入bin目录: 2.导出GridFS数据: ./mongodump --db test-db  --col ...

  6. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu;import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  7. C++ 流类和流对象

    程序中常用的 cin 和 cout,分别用于从键盘输入数据和向屏幕输出数据(简称为标准 I/O).除此之外,程序还可以从文件中读入数据,以及向文件中写入数据(简称为文件 I/O). 数据输入和输出的过 ...

  8. python图片转为二进制流_python将图片转为二进制-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 mysql 5.7.9 lin ...

  9. Java17-day08【File(创建和删除文件、判断和获取功能、遍历目录)、IO流(字节流写数据、异常处理、字节流读数据、复制文本文件、复制图片)】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  10. IO流(文件流 , 缓冲流 , 对象流, 字符流 )

    IO流父类 输入流InputStream : 硬盘–>内存 输出流OutputStream : 内存–>硬盘 文件流(FileInputStream 和FileOutputStream) ...

最新文章

  1. 送你一份不正经的深度学习简述(附论文)
  2. RecyclerView上拉加载Demo
  3. 【poj解题】1308
  4. 双显卡能双屏显示吗_i5-8305G+双显卡交火,最近很火的迷你主机零刻Turbo性能靠谱吗?...
  5. 在SAP分析云里利用词云技术显示大段文本里的关键词
  6. keras中的回调函数
  7. 看视频时,类加载器没太理解,现在再整理下几个要点
  8. python--pexpect
  9. Ajax封装2.0版
  10. SLIC超像素分割详解(一)(二)(三)
  11. Python+大数据技术框架和数仓基础(一)
  12. itools苹果录屏大师_如何录制ZOOM视频会议?实用的录屏软件
  13. 常用软件分类运维或个人收藏软件必备,及文件夹打包下载
  14. 由电子领域延伸的技术视野
  15. STM32F401的外部中断EXTI
  16. Java简答题整理(一)
  17. java模拟器 能玩sisx_塞班sisx模拟器
  18. JavaOpencv实现答题卡扫描 银行卡号码截取
  19. cobbler源码安装
  20. 他看了几千份技术简历,愿意把技术简历的秘籍传授给你

热门文章

  1. java8实现Joiner:数组集合转换字符串
  2. Java集合相关面试题总结
  3. js 求数组中最小值
  4. 洛谷P2671 求和 数学 前缀和
  5. Swift3.0P1 语法指南——控制流
  6. 创业维艰,技术人创业如何少走弯路?
  7. 高性能 TCP UDP 通信框架 HP-Socket v3.3.1
  8. iOS进阶面试题----Block部分
  9. 利用 /dev/zero 创建虚拟硬盘
  10. MyBatis逆向工程生成代码(附源码)