带缓存的输入/输出流

一丶简介

缓存是I/O的一种性能优化.缓存流为 I/O 流增加了内存缓存区.有了缓存区,那么在流上执行 skip().mark() reset()方法,都成为可能.

总来的来说其实就是通过缓存读写.执行效率更高,更快.

二丶BufferedInputStream 与 BufferedOutputString类.

  • BufferedInputString(InputStream in)可以对所有InputString类进行带缓存的包装,达到性能优化.

1.两种构造方法



第一种: 传入一个InPutStream类的实现类对他做包装,带有32个字节的缓存.

第二种: 指定一个大小.

比如读取文件,BufferdInputStream对象位于InputStream类对象之前.

2.BufferOutputStream类.

1.构造方法

使用BufferdOutputStream输出信合和用OutputStream输出信息一样.只不过BufferedOutputStream有一个flush方法,用来将缓存区的数据强制输出玩.



只不过翻过来了,第一种就是构造32个字节缓存.第二个指定大小.创建.

-针对BufferedInputStream做包装实例

	private static void File() throws Exception {
// TODO 自动生成的方法存根
File f = new File("1.txt");//创建一个文件
InputStream in = new FileInputStream(f);
BufferedInputStream inn = new BufferedInputStream(in);//对in做包装
byte[] a = new byte[10];
inn.read(a);//利用缓冲区读取 System.out.println(Arrays.toString(a));//输出字节数组内容.
System.out.println(new String(a)); //字节数组,转为字符串显示. }

输出结果.



BufferedOutputStream类实例

	private static void File() throws Exception {
// TODO 自动生成的方法存根
File f = new File("1.txt");//创建一个文件
InputStream in = new FileInputStream(f);
OutputStream out = new FileOutputStream(f);
BufferedOutputStream outBuf = new BufferedOutputStream(out);
outBuf.write(new String("HelloWroldssss sdfsdfsdf").getBytes());
outBuf.flush();
outBuf.close();
}

文件中的结果

三丶BufferedReader类与BufferedWriter类

我们曾经说过,Java是Unicode字节集.所以字节读取可能出现错误.

然后针对这种错误,出现了Reader类以及Writer类.而缓冲流也针对这两个类实现了.就是上面所说的类.也就是内部缓存类.

用法跟上面的BufferedInputStream类一样.

1.BufferedReader缓存类的使用介绍.

-1.文件读取流程

提供的方法

代码例子

	private static void File() throws Exception {
// TODO 自动生成的方法存根
File f = new File("1.txt");//创建一个文件
Writer wfile = new FileWriter(f); //创建写文件UNICODE形式.
BufferedWriter wBufferFile = new BufferedWriter(wfile);//对写文件创建缓冲区.
String str[] = {"今天","你","学习了吗"};
//写入文件
for(int i = 0; i < str.length;i++) {
wBufferFile.write(str[i]);//循环写入
wBufferFile.flush();
}
wBufferFile.close(); }

实现结果

四丶数据输入/输出流

数据输入输出流(DataInputStream与DataOutputStream)允许应用程序与机器无关的方式,从底层输入流中读取基本的java数据类型,也就是说,当读取一个数据的时候,不用关心这个数值应该是那种字节了.

1.构造以及常用方法



java是Unicode编码.上字节.writebytes知识将字符中的每一个字符的低字节内容写到目标设备

writeChars将字符串中的两个字节内容写到目标设备

writeUtf则是按照UTF方式写入到目标设备.

输入流,提供了ReadUTF()用于读取,并且返回字符串.

例子:

	private static void File() throws Exception {
// TODO 自动生成的方法存根
File f = new File("1.txt");//创建一个文件
OutputStream wfile =new FileOutputStream(f); //创建写文件UNICODE形式.
DataOutputStream out = new DataOutputStream(wfile);
String str[] = {"今天","你","学习了吗"};
//写入文件
out.writeChars("今");
out.close(); }

总结

其实都是对输入输出流做的缓存封装,在流上封装了新的方法.读取数据.

Java开发知识之JavaIO操作缓存操作的更多相关文章

  1. java开发知识IO知识之输入输出流以及文件

    目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...

  2. Java开发知识之Java中的Map结构

    Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...

  3. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  4. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...

  5. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  6. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  7. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  8. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

  9. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

随机推荐

  1. Rest API 操作List Items

    获取所有的List Itemsfunction getItems(url) { $.ajax({ url: url, type: "GET", headers: { "a ...

  2. ES6语法(一)

    对于ES6中的一些基础语法,包括对数组/对象/函数/字符串的操作,chroem已经支持了这些语法 // var a = '你' // console.log(a.length) let a = 'ni ...

  3. Oracle约束、索引

    Oracle中的约束有五种,分别为: 非空:not null 主键:primary key 外键:foreign key 唯一:unique 检查:check 在数据字典视图 user_constra ...

  4. IaaS,PaaS和SaaS

    云计算的三种服务模式:IaaS,PaaS和SaaS IaaS: Infrastructure-as-a-Service(基础设施即服务)是第一层. PaaS: Platform-as-a-Servic ...

  5. 各个模块的刷新js

    // 更新页面中的subgrid function refreshSubGrid(subgridName) { Xrm.Page.ui.controls.get(subgridName).refres ...

  6. 用kattle将数据从SQLserver中导入到vertica中

    今天简单的学习了一下ETL工具kattle了,只是简单的上手,不过这也已经够我去做POC了. 首先大体介绍一下kattle,Kettle是一款国外开源的ETL工具,纯java编写,可以在Window. ...

  7. css知识总结

    ---# 学习目标:> 1. 学会使用CSS选择器> 2. 熟记CSS样式和外观属性> 3. 熟练掌握CSS各种选择器> 4. 熟练掌握CSS各种选择器> 5. 熟练掌握 ...

  8. 2019年我的OKR(objectives and key results)目标与关键成果法

     一.学习目标目标1:每天必背诵英语单词(可可英语App,百词斩App),掌握英语的基本从句语法,听力训练必备(英语四六级听力题,主要是为通过四六级考试)目标2:考研准备,高数(大一上下册),现代(大 ...

  9. Mysql 创建及导入表

    连接数据库 打开命令行输入mysql -uroot -p 进行数据库连接 创建并访问数据库 CREATE DATABASE test: //创建数据库test SHOW DATABSAES; //查看 ...

  10. 1 eclipse 离线安装activiti插件

    第一步:下载需要的离线activiti文件: 链接:https://pan.baidu.com/s/1-_XjIsuZfhiEZn6iLul6-Q  密码:mfyk  (这是其他网友的链接) 第二步: ...