IO流技术解决的问题:设备与设备之间的传输问题,内存——>硬盘,硬盘——>内存,等等

IO流技术

如果按照数据的流向划分可以划分为:输入流和输出流

输入输出的标准是以程序为参考物的,如果流出则选用输出流,如果数据流入则使用输入流。

如果按照处理的单位来划分:字节流和字符流

字节流:读取文件中的二进制数据,而且读取的二进制数据不会经过任何的处理

字符流:***也是读取文件中的二进制数据,不过会吧这些二进制的数据转换成我们能识别的字符。

字符流  = 字节流 + 解码

上面的分析告诉们先看字节流再学字符流

IO流中的类的名字,都很好叫,一般都是把父类作为子类名字的后缀。


输入字节流:最大的特点是一看类的名字就知道这个类是可以干什么的

InputStream 所有输入字节流的基类

|————FileInputStream

使用FileInputStream如何读取文件:

1、找到目标文件 。File类来解决

2、建立数据的输入通道。

3、读取文件的数据,使用流对象的read方法.当读到文件结尾时返回-1,表示结束

4、关闭资源。实质上就是释放资源的作用.一般调用close方法

这一块介绍了4中读取字符流的方法,最后,留下一种是最好的。贴在下面:

//使用缓冲数组配合循环一起来读取 这是最最推荐的方式 以后都是这种方式

 public static void readTest4() throws IOException
{
long start = System.currentTimeMillis();
//找到目标文件
File file = new File("D:\\pic.jpg");
//建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//建立缓冲数组配合循环 读取文件的数据
int length = 0; //保存每次读取到的字节个数
byte[] buf = new byte[1024*3]; //缓冲数组的长度一般是1024的倍数,因为正好是计算机处理单位,理论上来说缓冲数组越大,效率越高
while((length = fileInputStream.read(buf))!=-1)
{
System.out.println(new String(buf, 0, length));
      }
long end = System.currentTimeMillis();
System.out.println("使用时间:"+(end - start));
}

注意:

1、资源文件一旦使用完毕要立马是释放,不然别的程序将无法对该资源进行操作、

2、用户混错的buf构建字符串的时候必须应当new String(buf, 0, length),因为length是每次read出的长度,又能最后一次独处的内容没有buf总的长度那么长,那么buf中残存的又上一次的数据。

字节流之输出 OutputStream 所有输出字节流的基类

OutputStream 所有输出字节流的基类 抽象类

|——FileOutputStream 向文件输出数据的输出的字节流

FileOutputStream 输出字节流的使用步骤

1、找到目标文件

2、建立文件与程序的输出通道

3、把数据转换成字节数组写出

4、关闭资源

FileOutputStream要注意的事情:

1、使用FileOutputStream的时候,如果目标文件不错在,就会自动创建目标文件。

2、使用FileOutputStream的时候,如果文件已经存在,那么会先清空目标文件中的数据,然后在写入数数据。

3、使用FileOutputStream的时候,如果文件已经存在,需要在原来的文件末尾追加元素的时候,应当使用构造函数new FileOutputStream(file, true);每创建一个FileOutputStream的时候,指正会指向文件的开始位置。每写一次指针都会做出相应的移动,拷贝文件的时候,会新建一个文件,因为指针是一直持续向后移动的。

4、使用FileOutputStream的write方法写数据的时候,虽然每次接受而的是一个int型的数据,但是整整写出的只是一个字节的数据,只是把低8位的二进制数据写出,其他24位的数据全部丢弃。

使用输出流,把字节数组中的数字写出:

 public static  void writeTest2() throws IOException
{
//找到目标文件
File file = new File("D:\\b.txt");
//建立文件与数据的输出通道
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
//把数据写出
String data = "hello world"; //getbytes()转变为字节数组
fileOutputStream.write(data.getBytes());
//关闭资源
fileOutputStream.close();
}

拷贝一张图片:

 public static void copyImage() throws IOException
{
//找到目标文件
File inFile = new File("D:\\1.jpg");
File destFile = new File("E:\\1.jpg");
//建立数据的输入输出通道
FileInputStream fileInputStream = new FileInputStream(inFile);
FileOutputStream fileOutputStream = new FileOutputStream(destFile); //追加数据.... //每新创建一个FileOutputStream的时候,默认情况下FileOutputStream 的指针是指向了文件的开始的位置。 每写出一次,指向都会出现相应移动。
//建立缓冲数据,边读边写
byte[] buf = new byte[1024];
int length = 0 ;
while((length = fileInputStream.read(buf))!=-1){ //不限丢人的输出来第一次我写的时候,read(buf)中的参数buf被我写丢了,好久才发现的错误
fileOutputStream.write(buf,0,length); //写出很多次数据,所以就必须要追加。
}
//关闭资源 原则: 先开后关,后开先关。
fileOutputStream.close();
fileInputStream.close();
}

(16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream的更多相关文章

  1. Java Io 流(输入输出流)

    IO流,也就是输入和输出流,可分为字节流和字符流. 1. 字节流 (1). InputStream 输入流,用于读取文件 输入流常用API: inputStream.read()  读取一个字节 in ...

  2. Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)

    1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...

  3. Java中IO流,输入输出流概述与总结

    总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...

  4. IO流回顾与总结第一篇之字节流与字符流的操作。。。。。

    一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...

  5. J03-Java IO流总结三 《 FileInputStream和FileOutputStream 》

    1. FileInputStream    FileInputStream是一个文件输入节点流,它是一个字节流,它的作用是将磁盘文件的内容读取到内存中. FileInputStream的父类是Inpu ...

  6. IO流 - 字节输入输出流,文件的复制

    IO流 I:input - 输入(读取),eg:把硬盘的内容读取到内存 O: output - 输出(写入) eg:把内存中的东西写入硬盘保存 流:数字(字符/字节) 一般1个字符=2Byte,1By ...

  7. Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1

    1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt   --   读取数据  --  FileInpu ...

  8. IO流07_输入输出流总体系

    [javaIO体系中常用的流] [关于字符流和字节流的注意点] 通常,字节流比字符流功能更加强大,因为字节流可以处理所有的二进制文件. 但是字节流来处理字符,又需要将字节转换成字符,增加了编程复杂度. ...

  9. Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]

    1. FileInputStream读取数据一次一个字节数组byte[ ]  使用FileInputStream一次读取一个字节数组: int read(byte[]  b) 返回值:返回值其实是实际 ...

随机推荐

  1. js 计算月/周的第一天和最后一天

    因为项目开发中遇到需要向后台传本周的开始和结束时间,以及上一周的起止时间,就琢磨了半天,总算写出来一套,写篇文章是为了方便自己记忆,也是分享给需要的人,水平有限,写的不好请见谅: getDateStr ...

  2. 数据挖掘学习笔记--AdaBoost算法(一)

    声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...

  3. CSS3中字体平滑处理和抗锯齿渲染

    在围观Drupal官方主题的时候,发现了一个有意思的非标准CSS选择器-webkit-font-smoothing,于是上手把玩了一番.如何使用css3字体平滑显示呢 要知道,W3C对CSS中字体的抗 ...

  4. 微服务框架概览之 Netty

    Netty 是什么 Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序 Netty 架构图 为什么选择Netty 通过对Netty的分析,我 ...

  5. C++编程练习(17)----“二叉树非递归遍历的实现“

    二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...

  6. JAVA中的访问修饰符和包

    一.JAVA访问修饰符 访问修饰符,用来控制类中成员的可见性 有四个访问修饰符,分别是:default,private,public,protected 1.default(默认):默认权限,不用写的 ...

  7. Ionic start 创建项目报错 Error with start undefined

    转自:http://blog.csdn.net/wenzigui_qy/article/details/52874542 在Installing npm packages的时候报错,如下: Insta ...

  8. CSS3知识点整理(五)----响应式设计及其他属性

    介绍Media Queries与Responsive设计以及外轮廓属性.resize属性.CSS3生成内容等 学会如何使用CSS3中的Media Queries模块来让一个页面适应不同的终端(或屏幕尺 ...

  9. swift 2.0 用代码写一个简单地UIWebView

    其实写一个UIWebView 挺简单的,但是今天就被9.0 的新特性给坑了,不知道上一个项目中有没有遇到这个问题,反正是时间成了,自己也忘记了.今天还是再说一次吧. 我们先简单的创建一个UIWebVi ...

  10. TCP报文段的首部格式

    首部20个字节的的固定部分,40个字节的可选部分 (1)源端口和目的端口 (2)序号(是字节流的编号,0-2^32-1),如果超过了mod2^32 (3)确认号:目的主机希望源主机收到的下一个字节序号 ...