1.读写的类型分为字节流和字符流,字节流一般是视频音频其他所有的类型都可以。

(非文档文件使用字符流易造成未知编码(?)错误)

InputStream OutputStream 抽象类

fileInputString FileOutputStream(file,true)//true追加还是覆盖

字符流一般读取文档文件因为有字符编码

Reader Writer 抽象类

fileReader fileWrite(字符流其实就是继承了转换流(即指定了编码))

2。处理流,字节缓冲流和字符缓冲流:必须在字节字符流(或者转换流)之上

bufferedInputSteam bufferedOutputStream

bufferedReader buffereWriter

新增方法readLine() newLine()  可以读取一行数据。

(他们的父类是过滤流,过滤流分别是字节流和字符流的子类)

3.转换流,字节流转换字符流,重点是提供了自定义转换的编码

inputStreamReader(字节流,‘编码’) outputStreamWriter(字节流,“编码”);

总结:上面的这三种流可组合使用:(2(3(1)));一般只是1,2组合使用。

4.编码,解码(-->二进制,--->字符)

4.1乱码的原因:

IO流不要使用多态,即:子类赋值给父类,调用方法。

一:编码解码字符集不一致。二:字节的长度不完整(数据缺失解析错误)

byte[] b="指定编码".getBytes("utf-8");//byte[] b=“默认平台编码”.getBytes();

new String("指定解码","gbk");//如果是new String("就是默认平台编码");

其他流:

5.节点流:字节数组流(从内存中读取和写入)和可以和缓存流一起使用。(感觉没有什么特别的用处,只是统一了数据传输都可以是流)

ByteArrayInputStream:读取和字节流类似

ByteArrayOutputStream :和字节流区别是,定义流时不要参数,写出的数据通过:byte[] b=流.toByteArray()得到。

还有一个类似的字符数组流。

6.处理流:数据流,可以传输基本类型和String类型的数据。

DataInputStream readxxx()

DataOutputStream writerxxx()

注意:

读写数据的类型必须一致。

一般和缓冲流+字节流(或者和缓冲流+字节数组流)一起使用

DateInputstream(bufferedinputStream(FileInputStream/ByteArrayInputStream)

7.处理流:对象流(对象写到文件:序列化和从文件中读取对象反序列化)不仅可以传输基本还能传输对象。

ObjectInputStream     readObject()

ObjectOutputStream  writeObject()

注意:

对于需要序列化的对象必须实现serialization接口

对于对象中不需要序列化的属性可以用关键字“tranisant”标识(同时反序列化得到对象,获取属性值为null)

一般和缓冲流+字节流(或者和缓冲流+字节数组流)一起使用

8.处理流:打印流(system.out)及键盘输入流(system.in)

FileInputStream fdIn = new FileInputStream(FileDescriptor.in);//默认的system.in
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);默认的system.out
 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
Scanner scanner = new Scanner(System.in);//键盘输入(是对上面一种功能更加强大的对流封装)

默认打印流是输出到控制台。输入流是键盘。可以修改成从文本中输入输出:

PrintStream out = System.out;
out=new PrintStream(new BufferedOutputStream(new FileOutputStream("f:/test/out.txt")),true);//true自动刷新
InputStream in = System.in;
in=new BufferedInputStream(new FileInputStream("f:/test/in.txt"));

如果想改回去,将上面默认的流做参数传入即可。

打印流除了PrintStream还有字符打印流PrintWriter,可对字符流的处理。

9.java1.7try新特性:try-with-resource(详情)

try (FileInputStream in = new FileInputStream("d:/in.txt")) {
// do something
} catch(Exception e) {
System.out.println("message:"+e.getMessage());
throw new RuntimeException("try块中产生了异常",e);
}

try()中的类型必须实现AutoCloseable接口(jdk1.7开始引入了此接口,作为Closeable接口的父接口)

等价于:

 try {
InputStream in = null;
try {
in = new FileInputStream("d:/in.txt");
// do something
in.close();
} catch (IOException e) {
if (in != null)
try {
in.close();
} catch (IOException ee) {
if (e != ee)
e.addSuppressed(ee);
}
throw e;
}
} catch (IOException e) {
System.out.println(e.getMessage());
throw new RuntimeException("try块中产生了异常", e);
}

10.装饰模式:一个类包装另一个类增强其功能,比如一些处理流就是包装一些节点流。

11.拷贝文件:父目录文件夹不能拷贝到子目录文件夹中

12.RandomAccessFile :文件随机读写流。(可以用于文件的分割)详情(12

randomAccessFile(fiel,"r/rw");//是读取(r)还是写入流(rw)

seek(index);设置读取或者写入的位置。

文件合并追加到另一个流文件中即可。

13.sequenceInputSream:合并输入流,将多个流合并成一个流操作。可可以用于合并文件

sequenceInputStream(inputStream ,inputStream);

sequenceInputStream(Enumaton<input> );//多个流枚举参数。

vector<inputstream>.element();返回枚举

总结:

注要分为节点和处理:

1.节点流:直接关联数据源和程序比如:

字节流,字节数组流,

字符流,字符数组流

随机访问流

2.处理流:具有一些特定功能增强:

缓冲流(包括字节缓冲,字符缓冲,输入输出流)

转换流(只有输入输出字节转换为字符)

打印流(只有一个打印流)

数据流(输入输出流)

对象流(输入输出流)

合并输入流(只有输入流)

基础笔记10(IO 1.7try-with-resource) 装饰模式的更多相关文章

  1. 黑马程序员_java基础笔记(07)...IO流

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...

  2. 黑马程序员_java基础笔记(10)...JDK1.5的新特性

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1:静态导入.2:for—each循环.3:自动装箱/拆箱.4:可变参数.5:枚举 ...

  3. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

  4. Java基础笔记10

    类的设计分析: 1.根据需求抽取属性.(名词几乎都是属性) 2.属性私有化(private) 3.生成setter和getter方法 4.可以根据需要添加构造函数. 5.根据需求抽取其他方法.(动词几 ...

  5. JAVA基础(10)——IO、NIO

    转载:http://blog.csdn.net/weitry/article/details/52964948 JAVA基础系列规划: JAVA基础(1)——基本概念 JAVA基础(2)——数据类型 ...

  6. REDIS基础笔记

    Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布 ...

  7. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  8. MYSQL基础笔记(五)- 练习作业:站点统计练习

    作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...

  9. 操作系统概念学习笔记 10 CPU调度

    操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...

随机推荐

  1. [总结] JDBC数据库操作

    1.加载驱动--告诉驱动管理将使用哪一个数据库的驱动包. class.forName("com.mysql.jdbc.Driver"); 2.操作JDBC ADI完成数据库动作 D ...

  2. C/C++ 结构体 数组 函数传递

    #include <stdio.h> #include <stdlib.h> struct student{ int num; ]; double dec; }; void s ...

  3. C#数组的声明

    C#一维数组的声明方式 int[] myArray; string[] myStrArr; 但是在访问数组之前必须初始化. C#数组的初始化方式有两种,第一种是在声明数组的时候为数组的元素赋初值: i ...

  4. gulp使用引导

    全局安装npm  install  –g  gulp 安装到本地 npm install gulp –save-dev 新建gulpfile.js 编写文件内容并运行 var gulp = requi ...

  5. 00Linux学习及角色定义

    一.嵌入式Linux学习顺序 二.Linux架构 三.Linux工程师角色划分 四. 嵌入式应用工程师工作内容与所需知识点 从图 1可以知道, 嵌入式应用工程师主要从事与产品相关的嵌入式 Linux ...

  6. http 中定义的八种请求的介绍

    在http1.1协议中,共定义了8种可以向服务器发起的请求(这些请求也叫做方法或动作),本文对这八种请求做出简要的介绍: 1.PUT:put的本义是推送 这个请求的含义就是推送某个资源到服务器,相当于 ...

  7. 【转】Python练习,网络爬虫框架Scrapy

    一.概述 下图显示了Scrapy的大体架构,其中包含了它的主要组件及系统的数据处理流程(绿色箭头所示).下面就来一个个解释每个组件的作用及数据的处理过程. 二.组件 1.Scrapy Engine(S ...

  8. Server.MapPath和Request.PhysicalApplicationPath的异同

    很多人对它们都不陌生,在众多的WEB程序中,使用Server.MapPath和Request.PhysicalApplicationPath来操作目录/文件的几率参半,我曾经也经常混用,然而时间久了. ...

  9. [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改

    前言 转载请注明出处:http://www.cnblogs.com/ainijiutian 最近在silverlight项目使用Telerik的控件,遇到一个问题.就是使用RadBusyIndicat ...

  10. YbSoftwareFactory 代码生成插件【二十】:DynamicObject的序列化

    DynamicObject 是 .NET 4.0以来才支持的一个类,但该类在.NET 4.0下未被标记为[Serializable] Attribute,而在.NET 4.5下则被标记了[Serial ...