I/O系统概念:

Java内存中对一段数据序列的一次读写(输入、输出)操作,并且是以"流(stream)"的方式进行。

一、流操作基本概念:

(1)数据源:即保存数据的地方,也可以理解为数据的仓库,常见的有内存、文件、网络连接、数据库

(2)流:是指数据在数据源和程序间所经历的路径, 包括两大类:输入流和输出流

(3)输入流:数据从数据源(文件)传递到程序(内存)的路径

(4)输出流:数据从程序传递到数据源的路径

二、操作流程:

(1)打开数据源

(2)根据数据源建立相对应的输入输出流

(3)根据输入输出流进行读写操作

(4)操作完成后一定要关闭相应的输入输出流

三、Java IO流原理

(1)I/O是Input/Output,用于处理数据传输,如读/写文件,网络通讯等

(2)java.io包下提供了各种"流"类和接口,以获取不同种类的数据,并通过方法输入或者输出数据

(3)输入(Input):读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存中)

(4)输出(Output):将程序(内存)数据输出到磁盘、光盘等存储设备中

四、流的分类

(1)按操作数据单位不同分为:字节流(8 bit)二进制文件、字符流(按字符)文本文件

1字符 = 2字节 、 1字节(byte) = 8位(bit) 、 一个汉字占两个字节长度

1)字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码

2)字符流:每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文

(2)按数据的流向不同分:输入流,输出流, 此输入、输出是相对于我们写的代码程序来说

1)输入流:从别的地方(本地文件,网络上的资源等)获取资源 输入到 我们的程序中

2)输出流:从我们的程序中 输出到 别的地方(本地文件), 将一个字符串保存到本地文件中,就需要使用输出流。

(3)按流的角色的不同分为:节点流,处理流/包装流

1)节点流:以从或向一个特定的地方(节点)读写数据。如FileInputStream

2)处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装

1、IO流常用到的五类一接口

在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable

1.2、4个基本的抽象流类型

(抽象基类) 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Write

滴滴:Java的IO流共涉及40多个类,都是从如上4个抽象基类派生的,由这4个类派生出来的子类名称都是以其父类名作为子类后缀名

1.2.1、InputStream字节输入流的类层次图

1.2.2  各种字节输入流的含义

1. 2.3  字节输入流的常用方法

1.2.4   文件字节输入流FileInputStream:为了创建FileInputStream类的对象,可以使用构造方法:

1)¨public FileInputStream(String name):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

2)¨public FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

滴滴:FileInputStream流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取文件中其余的内容,直到文件的末尾或流被关闭。

1)public void close() throws IOException

2.2.5   缓冲输入流BufferedInputStream

¨它通过重写其超类FilterInputStream的方法,在其中提供了内部缓冲操作,内部缓冲允许大量待读取的数据存入缓冲区内。即使重写了FilterInputStream的方法,其过滤机器仍保留着。使用内部缓冲,使得实际数据可以按块读取,如按照磁盘的块大小进行读取。其后的读请求由内部缓冲区来响应,这样访问速度比磁盘的访问速度快。

构造方法:

1)¨public BufferedInputStream(InputStream in);

2) public BufferedInputStream(InputStream in, int size);

第一种形式使用一个缺省的缓冲区大小,而第二种形式用构造方法的第二个参数指定缓冲区大小。

代码演示:

package io;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FileReadDemo {public static void main(String[] args) {  File f=new File("D:\\animal\\123.txt");FileInputStream fin=null;/*try {//字节流:输入流(读) 、输出流(写)//创建一个文件输入流对象fin=new FileInputStream(f);int temp=0;         while((temp=fin.read())!=-1) {System.out.print((char)(temp));}} catch (Exception e) {e.printStackTrace();}finally {try {fin.close();//关闭输入流} catch (IOException e) {e.printStackTrace();}}*//*try {fin=new FileInputStream(f);byte[] b=new byte[1024];  int temp=0;while((temp=fin.read(b))!=-1) {String str=new String(b, 0, temp);//解决乱码,字符串转码String s=new String(str.getBytes(), "utf-8");System.out.println(s);}} catch (Exception e) {e.printStackTrace();}finally {try {fin.close();//关闭输入流} catch (IOException e) {e.printStackTrace();}}*/BufferedInputStream bin=null;try {fin=new FileInputStream(f);bin=new BufferedInputStream(fin);//缓冲输入流byte[] b=new byte[1024];   int temp=0;while((temp=bin.read(b))!=-1) {String str=new String(b, 0, temp);//解决乱码,字符串转码String s=new String(str.getBytes(), "utf-8");System.out.println(s);}} catch (Exception e) {e.printStackTrace();}finally {try {fin.close();//关闭输入流} catch (IOException e) {e.printStackTrace();}}}}

2.节输出流的类层次图

 2.1种字节输出流的含义

2.2字节输出流的常用方法

2.2.1 文件类输出流FileOutputStream

构造方法格式如下:

1)public FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的输出文件流。

2)public FileOutputStream(File file):创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

3)FileOutputStream(File file, boolean append):创建一个向指定 File 对象表示的文件中写入数据的文件输出流。(append - 如果为 true,则将字节写入文件末尾处,也就是追加

4)FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流。

滴滴:FileOutputStream流顺序地写文件,只要不关闭流,每次调用write( )方法就顺序地向文件写入内容,直到流被关闭。如果输出流要写入数据的文件已经存在,该文件中的数据内容就会被刷新;如果要写入数据的文件不存在,该文件就会被建立

2.2.2  缓冲输出流BufferedOutputStream

BufferedOutputStream:继承自FilterOutputStream,该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统

构造方法:

1)BufferedOutputStream(OutputStream out):创建一个新的缓冲输出流,以将数据写入指定的底层输出流

2)BufferedOutputStream(OutputStream out, int size) :创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流

常用方法:1)void flush() :刷新此缓冲的输出流。

2)void write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

3)void write(int b) :将指定的字节写入此缓冲的输出流

代码演示:

package com.io;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileWiterDemo {public static void main(String[] args) throws IOException {// 字节流:文件输出流(写)File f=new File("D:\\a\\b\\c\\d\\1.txt");//    FileOutputStream fout=new FileOutputStream(f);//文件输出流/*FileOutputStream fout=new FileOutputStream(f,true);//不覆盖源文件,追加新内容String str="\r\n hello world";fout.write(str.getBytes());//write 写入文件fout.close();*/FileOutputStream fout=new FileOutputStream(f,true);BufferedOutputStream bout=new BufferedOutputStream(fout);String str="\r\n imti";bout.write(str.getBytes());bout.flush();//刷新缓冲区bout.close();//关闭输出流}}

例题:文件copy

package com.io;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopy {public static void main(String[] args) throws IOException {File f1=new File("D:\\a\\b\\c\\d\\1.txt");File f2=new File("D:\\a",f1.getName());FileInputStream fin=new FileInputStream(f1);//文件输入流--读BufferedInputStream bin=new BufferedInputStream(fin);//缓冲输入流FileOutputStream fout=new FileOutputStream(f2);//文件输出流--写BufferedOutputStream bout=new BufferedOutputStream(fout);//缓冲输出流byte[] b=new byte[1024];int n=0;while((n=bin.read(b))!=-1) {//读取文件String str=new String(b, 0, n);bout.write(str.getBytes());//写入文件}bout.flush();//刷新缓冲区bout.close();fout.close();bin.close();fin.close();}
}

照片copy:

package io;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;import javax.imageio.stream.FileImageOutputStream;//将图片拷贝到另一个目录中
public class PictureCopy {public static void main(String[] args) throws IOException {FileInputStream f = new FileInputStream("F:\\anzhuo\\笔记\\ren.jpg");BufferedInputStream b = new BufferedInputStream(f);FileOutputStream fos = new FileOutputStream("F:\\QLDownload\\ren.jpg");BufferedOutputStream bout = new BufferedOutputStream(fos);int read;while ((read = b.read()) != -1) {bout.write(read); }bout.flush();f.close();b.close();fos.close();bout.close();}
}

图片copy:

JAVA-IO流笔记整理----(2)字节流输入输出相关推荐

  1. JAVA(IO流)知识整理

    IO (Input Output)流 IO流用来处理设备之间的数据传输: JAVA对数据的操作是通过流的方式: JAVA对于操作流的对象都在IO包中: 流按操作数据分为两种:字节流和字符流: 流按流向 ...

  2. Java IO流笔记

    File 1.定义 文件和文件夹的抽象表示形式 java把文件和文件夹封装为File类我们可以使用File类对文件或文件夹进行操作 2.路径 绝对路径:是一个完整的路径,从盘符开始 相对路径:是一个简 ...

  3. Java IO流 详解(字节流、字符流、输入流、输出流、刷新)

    一.IO流概述 I:Input输入  从其他存储设备[读]数据到内存中  输入过程         O:OutPut输出  从内存中[写]数据到其他存储设备  输出过程 二.IO流分类 1.根据数据的 ...

  4. 一篇文章总结java IO流(File、字节流、字符流、特殊操作流)

    目录 1.File 1.1 File类概述和构造方法 1.2 File类创建功能 1.3 File类删除功能 1.4 File类判断和获取功能 2.字节流 2.1 IO流概述和分类 2.2 字节流写数 ...

  5. java IO流详解及特性

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. Java IO流详尽解析

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. java IO流小结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  9. java io流大全_Java IO流系统整理

    Java IO流的分类 Java中的流,可以从不同的角度进行分类. 按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 按数据传输单位分类: 字节流:以字节(8位 ...

最新文章

  1. 杭电多校第三场-H-Game
  2. JZOJ 4307. 【NOIP2015模拟11.3晚】喝喝喝
  3. python批量做线性规划(每次的约束条件参数有变换)
  4. CATALINA_BASE与CATALINA_HOME的区别
  5. 霍夫直线检测python_python+opencv实现霍夫变换检测直线的方法
  6. BZOJ【1609】 麻烦的聚餐
  7. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(6)- Bootable image格式与加载(elftosb/.bd)...
  8. 政府信息化与电子政务
  9. 线性动力学问题(二)
  10. Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.2.RELEASE:repackage (de
  11. 内外兼修:Oracle ACED熊军谈Oracle学习
  12. PG与mysql的区别
  13. JS基础 将字符串数组用|或其他符号分割
  14. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)
  15. EDD-SPT综合规则
  16. 有没有让你相见恨晚的(高考)教辅书?
  17. 讲解基于verilog的4-2压缩器和3-2压缩器的实现方式,实现华莱士树(Wallace Tree)
  18. jmeter操作数据库,jmeter之beanshell
  19. 西邮linux小组2019-2021面试题总结
  20. https双向认证訪问管理后台,採用USBKEY进行系统訪问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录...

热门文章

  1. 汪星人怎么画?宠物怎么画?
  2. rust怎么建莲花房_《Rust》生存指南及房屋建造攻略
  3. android auto 字体大小,TextView自动调整字体大小
  4. Qt开源作品37-网络中转服务器
  5. Java 的四种引用方式
  6. P02014030 陈子俊
  7. IDEA debug HashMap源码的心得
  8. QGraphicsView旋转(横屏竖屏)
  9. MySQL新闻发布系统
  10. 利用excel实现简易抽奖