IO流之处理流用法总结
处理流之一:缓冲流
1.为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,
会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。
2.缓冲流要“套接”在相应的节点流之上,根据数据操作单位可以把缓冲流分为:
➢BufferedInputStream 和 BufferedOutputStream
➢BufferedReader 和 BufferedWriter
1.当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区。
2.当使用BufferedInputStream读取字节文件时,BufferedInputStream会一次性从文件中读取8192个(8Kb),
存在缓冲区中,直到缓冲区装满了,才重新从文件中读取下一个8192个字节数组。
3.向流中写入字节时,不会直接写到文件,先写到缓冲区中直到缓冲区写满,
BufferedOutputStream才会把缓冲区中的数据一次性写到文件里。
4.使用方法lush()可以强制将缓冲区的内容全部写入输出流。
关闭流的顺序和打开流的顺序相反。只要关闭最外层流即可,关闭最外层流也会相应关闭内层节点流。
5.flush()方法的使用:手动将buffer中内容写入文件。
6.如果是带缓冲区的流对象的close()方法,不但会关闭流,还会在关闭流之前刷新缓冲区,关闭后不能再写出。
处理流之二:转换流
1.转换流提供了在字节流和字符流之间的转换。
2.Java API提供了两个转换流:
➢InputStreamReader:将InputStream转 换为Reader。
➢OutputStreamWriter:将Writer转 换为OutputStream。
3.字节流中的数据都是字符时,转成字符流操作更高效。
4.很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能。
InputStreamReader概述:
●实现将字节的输入流按指定字符集转换为字符的输入流。
●需要和InputStream “套接”。
●构造器:
➢public InputStreamReader(InputStream in)
➢public InputSreamReader(InputStream in,String charsetName)
如:Reader isr = new InputStreamReader(System.in, 'gbk" );gbk为指定字符集。
OutputStreamWriter概述:
●实现将字符的输出流按指定字符集转换为字节的输出流。
●需要和OutputStream“套接”。
●构造器:
➢public OutputStreamWriter(OutputStream out)
➢public OutputSreamWriter(OutputStream out, String charsetName)
处理流之三:标准输入、输出流
1.System.in和System.out分别代表了系统标准的输入和输出设备。
2.默认输入设备是:键盘,输出设备是:显示器。
3.System.in的类型是InputStream。
4.System.out的类型是PrintStream,其是OutputStream的子类
FilterOutputStream的子类。
5.重定向:通过System类的setIn,setOut方法对默认 设备进行改变。
➢public static void setln(InputStream in)
➢public static void setOut(PrintStream out)
public static void main(String[] args) { BufferedReader br = null; try { InputStreamReader isr = new InputStreamReader(System.in); br = new BufferedReader(isr); while (true) { System.out.println("请输入字符串:"); String data = br.readLine(); if ("e".equalsIgnoreCase(data) || "exit".equalsIgnoreCase(data)) { System.out.println("程序结束"); break; } String upperCase = data.toUpperCase(); System.out.println(upperCase); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }
处理流之四:打印流
●实现将基本数据类型的数据格式转化为字符串输出。
●打印流: PrintStream和PrintWriter。
➢提供了一系列重载的print()和printn()方法,用于多种数据类型的输出。
➢PrintStream和PrintWriter的输 出不会抛出IOException异常。
➢PrintStream和PrintWriter有 自动flush功能。
➢PrintStream打印的所有字符都使用平台的默认字符编码转换为字节。
在需要写入字符而不是写入字节的情况下,应该使用PrintWriter类。
➢System.out返 回的是PrintStream的实例。
public void test() { PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream(new File("D:\\IO\\text.txt")); // 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区) ps = new PrintStream(fos, true); if (ps != null) {// 把标准输出流(控制台输出)改成文件 System.setOut(ps); } for (int i = 0; i <= 255; i++) { // 输出ASCII字符 System.out.print((char) i); if (i % 50 == 0) { // 每50个数据一行 System.out.println(); // 换行 } } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (ps != null) { ps.close(); } } }
处理流之五:数据流
处理流之六:对象流
使用对象流序列化对象:
java.io.Serializable接口:
●实现了Serializable接口的对象,可将它们转换成一系列字节,
并可在以后完全恢复回原来的样子。这一过程亦可通过网络进行。
这意味着序列化机制能自动补偿操作系统间的差异。
●可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一 台Unix机器,
然后在那里准确无误地重新“装配”。不必关心数据在不同机器上如何表示,
也不必关心字节的顺序或者其他任何细节。
●由于大部分作为参数的类如String、 Integer等都实现 了java.io.Serializable的接口,
也可以利用多态的性质,作为参数使接口更灵活。
IO流之处理流用法总结的更多相关文章
- 【JAVA IO流之字符流】
一.概述. java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中.流按照操作数据不同分为两种,字节流和字符流.流按照流向分为输入流,输出流. 输入输出的“入”和“出”是相当于内存来 ...
- 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java IO流 之 其他流
一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一). public class ByteArrayInputStream extends ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
IO流根据处理对象的不同分为节点流和处理流. 直接对文件进行处理的流为节点流: 对流进行包装从而实现对文件的优化处理的流为处理流. 节点流类型: 可以看出,节点流主要分这几大类: 文件流 文件流构造方 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- java io流(字符流) 文件打开、读取文件、关闭文件
java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...
- Java:IO流之转换流
IO流的基本流情况: 字符流: 字符流缓冲区: FileReader BufferedReader FileWriter ...
随机推荐
- 小程序clearinterval无效解决
小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...
- TabHost选项卡的实现(一):使用TabActivity实现
一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...
- C# 递归、try
一.递归 递归:在函数体内调用本函数自身,直到符合某一条件不再继续调用 两个需要满足的条件1.有反复调用自身函数的过程2.有函数的出口:有不再继续执行的条件 例子: 案例: (一).输入正整数n,求n ...
- 如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?
https://www.zhihu.com/question/35866596/answer/418341940
- H3C PPP MP配置示例三
- git的安装与命令行基本的使用
1.https://git-scm.com/ 点击这个网址进入git的官方网站 2,.进去里面会有提示,64位于32位的,根据自己的电脑安装 3 下载完了过后就直接安装,一般会安装在c盘里面 ,进入安 ...
- Mac下SVN基本操作和常见错误
一.基本操作 1 从服务器上下载代码 svn checkout http://xxx.xxx.xxx/xxx 2 获取最新的代码 svn update 3 提交代码 svn commit -m ...
- H3C 静态黑洞路由应用
- linux seqlock 锁
内核包含了一对新机制打算来提供快速地, 无锁地存取一个共享资源. seqlock 在这 种情况下工作, 要保护的资源小, 简单, 并且常常被存取, 并且很少写存取但是必须要快. 基本上, 它们通过允许 ...
- Visio日程安排图
黄日历: 怎么创建呢? 首先找到日程安排图表 然后找到日历 这就是日历的形状模块 拖动“日”日历形状进行创建 创建好的日历通过右键单击选择"配置"来修改日期 这是周日历 与日日历不 ...