java io 节点流和处理流
节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
常用的节点流
父 类 InputStream OutputStream Reader Writer
文 件 *FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流
数 组 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
字符串 *无 无 StringReader StringWriter 对字符串进行处理的节点流
管 道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流
常用处理流(关闭处理流使用关闭里面的节点流)
父 类 InputStream OutputStream Reader Writer
缓冲流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法咯
转换流 *InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作为参数,实现从字节流到字符流的转换
数据流 *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。
*ObjectInputStream ObjectOutputStream
*顺便研究序列化---将对象所在的类型全部转换成二进制,然后写入到介质中去
*transient关键字--修饰成员变量,不写入该成员变量
*Serializable接口--表示接口,怎样实现的呢,在序列化之前,首先判断 (对象 instanceof Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速查找某个对象的时候使用的
*Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化的方式
为什么要用writeUTF()--因为这种方式是按照utf-8来写入的,而默认方式是utf-16只是节省空间而已
--字节流读取中文的问题
*由于Java使用的是unicode编码,每一个中文字符是占用两个字节的,所以没有只读出其中一个字节并使用的话当然是乱码咯,虽然普通的英文字符也是两个字节的,但是读取的时候将高8位去掉也能回去正确的英文字符,所以没有问题,所以最好还是使用字符流的方式读取好点
--java.io中专门提供用于打印的流(这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都flush一次)--------注意他们也是属于处理流,只不过这里单独列出来分析而已
*PrintStream--继承自-->FilterOutputStream--继承自-->OutputStream,(它的构造函数需要OutputStream对象)
---------------------------------------------------------------------------------------------------------------------------------------------------------
*PrintWriter---继承自-->Writer(它的构造函数需要Writer对象)
System.In====InputStream
System.Out===PrintStream
这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP页面的打印会抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路
--看这样的代码
PrintStream ps=new PrintStream(new OutputStream("c://..."));
System.setOut(ps);
System.Out.println("jfdajsflkajdf");//这样将不会在打印到命令行窗口,而是指定的PrintStream目标文件里面去
java io 节点流和处理流的更多相关文章
- Java IO 节点流 FileInput/OutputStream
Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读 ...
- Java IO 节点流 ByteArrayInput/OutputStream
Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...
- Java IO(Properties/对象序列化/打印流/commons-io)
Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...
- Java IO详解(二)------流的分类
一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
一.字符流和字节流的区别 拿一下上一篇文章的例子: package com.demo.io; import java.io.File; import java.io.FileReader; impor ...
- Java IO(四)——字符流
一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...
- JAVA IO操作:数据操作流:DataOutputStream和DataInputStream
掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...
随机推荐
- 简易商品信息管理系统——首个Web项目
正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...
- Flask 开发| Flaskr 开发内容总结
Flaskr 开发说明 官方文档 http://flask.pocoo.org/docs/0.12/tutorial/ 演示网站 http://flaskr.it592.com/ 涉及到的内容: 连接 ...
- bootloader总体操作设计
bootloarder设计蓝图(不想做设计师的程序员不是好程序员):bootloarder的作用:将linux内核启动起来设计方法:模仿u-bootu-boot:支持多种嵌入式cpu的bootloar ...
- alertifyjs
<%@ page contentType="text/html; charset=UTF-8"%> <!DOCTYPE html PUBLIC "-// ...
- Spring bean的生命周期详解
bean的生命周期1.实例化bean 即new2.按照spring上下文对实例化的bean进行配置 即填充属性,也就是IOC/DI(控制反转,依赖注入)3.如果这个bean实现了BeanNameAwa ...
- 多个onload事件写法
window.onload=function(){ function(a); function(b); }
- spring 代码中获取ApplicationContext(@AutoWired,ApplicationListener)
2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVote/234 学习spring框架时间不长,一点一滴都得亲力亲为.今天忽然觉得老是通过@Autowir ...
- springmvc 对 jsonp 的支持
在与前端开发人员合作过程中,经常遇到跨域名访问的问题,通常我们是通过jsonp调用方式来解决.jsop百科:http://baike.baidu.com/link?url=JKlwoETqx2uuKe ...
- [Note] Apache Flink 的数据流编程模型
Apache Flink 的数据流编程模型 抽象层次 Flink 为开发流式应用和批式应用设计了不同的抽象层次 状态化的流 抽象层次的最底层是状态化的流,它通过 ProcessFunction 嵌入到 ...
- java 集合框架(十)List
一.概述 List是一种有序集合,有时也被称为序列,可以有重复的元素.List集合相比Collection,除了直接继承的方法外,有以下拓展的操作方法 位置访问---可以基于元素索引来操作元素,比如g ...