---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
IO是java基础中最重要的部分之一, 开始认真的对其学习.

从整体来看, IO流是用来处理设备之间的数据传输用的,流按照输入方式分为输入流和输出流,按照数据类型分为字符流和字节流,分别有4个基类,字符流的2个基类是Reader和Writer,字节流的基类分别是InputStream和OutputStream,计算机中的数据都是以字节的形式存在,可处理图片,多媒体,文档等多种形式的文件,字符流主要是为了处理文本文档用的,因此从字节流出发,进行IO的学习.

输入流是InputStream,是一个接口,不能创建实例对象,因此找到他的子类对象对其操作,对文件的操作选择FileIn-putStream,输入流是对文件进行读入操作,即read();初学时易进入误区,认为这是向外读出的操作,与输出流Output-Stream相混淆,用一张小图进行阐述:已有文件从硬盘上读进内存中,这个内存小人用眼睛和手接收数据,进入内存处理后,内存小人又将数据写出去,送到下一个硬盘中.

通过对字节流的输入输出双向操作可拷贝到不同的路径中,有4中方式,但他们的效率不一样,且各有优缺点.

第一种是读入写出都按一个字节一个字节,代码相对简单,但是传输效率最慢,不建议采用.

第二种是自己定义一个字节数组,自定义字节数组的长度,这样在传输时会按我们给定的长度先在硬盘上存储数据,在交给内存,输出时原理也一样,这样就大大的增快了传输效率,如代码:

private static void IO3() throws FileNotFoundException, IOException {
FileInStreamout = new FileInputStream("kk.mp3"); //输入流,传入已有文件路径
FileOutputStreamout = new FileOutputStream("kk.mp3"); //输出流,是目的文件
byte [] b = new byte[1024]; //创建一个存1024个字节的数组
int len=0; //用int型len记录字节长度
while((len=in.read(b))!=-1){ //判断未读到最后一个字节,就对其循环遍历
out.write(b,0,len); //从数组b中写出,从0角标开始,写到长度为len时结束
}
in.close(); //关闭输入流资源
out.close(); //关闭输出流资源
}

第三种是创建数组后指定数组长度为avaiable(),它可以指定为当前文件的长度,但如果该文件的所占内存超出,用它就会溢出内存,因此也不建议用这种.

第四种是用方法BufferedInputStream和BufferedOutputStream,这是字节流的缓冲区,里面封装了字节数组的对象,减少了代码量.

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

黑马程序员_IO输入输出流相关推荐

  1. 黑马程序员_输入输出流(I/O)

    <a href="http://www.itheima.com"  target="blank">android培训</a>.<a ...

  2. 黑马程序员_io流详解

    ------- android培训.java培训.期待与您交流! ---------- 多线程总结: 1,进程和线程的概念. |--进程:正在运行中的程序 |--线程:进程中的一个执行单元,负责进程中 ...

  3. 黑马程序员_java高级篇网络编程TCP实战Day8(上)

    ---------------------ASP.Net+Android+IOS开发.Net培训.期待与您交流! ----------- 黑马程序员_java高级篇网络编程TCP实战Day8(上) ( ...

  4. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

  5. 黑马程序员C++笔记

    C++ 课程链接: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 一.C++基础语法 1.变量和常量数据 1.1第一个C++程序 编写一个C++程序总共分 ...

  6. [学习笔记]黑马程序员-Hadoop入门视频教程

    文章目录 参考资料 第一章:大数据导论与Linux基础(p1-p17) 1.1 大数据导论 1.1.1 企业数据分析方向 1.1.2 数据分析基本流程步骤 明确分析的目的和思路 数据收集 数据处理 数 ...

  7. 黑马程序员_java自学学习笔记(八)----网络编程

    黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...

  8. 哔哩哔哩黑马程序员C++课程个人学习笔记

    写在前面:此博文仅作为个人c++学习笔记,或有错误不建议参考!!! 视频链接:黑马程序员c++教程从0到1 目录 一.第一部分c++基础 1.1 c++初识 1.1.1 hello world 1.1 ...

  9. 黑马程序员Java零基础视频教程_下部(P52-P134)

    黑马程序员Java零基础视频教程_下部(P52-P134) 1. 异常 1.1 异常体系介绍 1.2 编译时异常和运行时异常 1.3 异常在代码中的两个作用 1.4 JVM虚拟机默认处理异常的方式 1 ...

  10. 黑马程序员Java零基础视频教程_下部(P135-P200)

    黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...

最新文章

  1. windows 常用工具
  2. 一条简单的 SQL 执行超过1000ms,纳尼?
  3. C++设计模式--抽象工厂模式
  4. 麦格纳软件公司绩效考核信息化管理解决方案
  5. mac基本操作技巧_6个基本设计技巧
  6. oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写
  7. 【匈牙利算法】指引(jzoj 2319)
  8. 金融行业 | 电子银行系统性能优化解决方案
  9. AcWing323. 战略游戏(树形DP)题解
  10. CCF201709-3 JSON查询(100分)【文本处理】
  11. 数据库操作之整合Mybaties和事务讲解 5节课
  12. “7天”连锁酒店郑南雁
  13. vscode通过ssh远程连接服务器
  14. 【Unity3D游戏开发实战】Unity3D实现休闲类游戏《2048》——算法、源代码
  15. 读《我没偷懒 - 读写记忆困难儿童案例》
  16. node.js毕业设计鲸落图书商城小程序LW(源码+程序+LW+部署)
  17. 计算机组成原理(笔记)
  18. Swift 周报 第十七期
  19. SpringBoot重启后,第一次请求接口请求慢的解决方案
  20. c语言游泳是怎么钓鱼的,不会游泳的钓友进来看 自制饵料钓鲤鱼

热门文章

  1. linux下安装qt教程
  2. 使用DFA算法对敏感词进行过滤
  3. CAD、mapgis、excel转换为coreldraw技巧方法-来自《地球科学》姚戈
  4. R数据分析——回归分析
  5. Codingame平台“CHUCK NORRIS”的Python实现
  6. 双级矩阵变换器matlab,双空间矢量调制下双级矩阵变换器的谐波分析
  7. 分库分表之MyCat应用
  8. 算法导论第三章思考题
  9. DWT(离散小波变换)与其简单应用
  10. 架构问题--削峰填谷