Java的I/O总结
概念:Java语言中数据流是接收和发送数据的管道。流是一位单项的。
流的分类:
按照字节字符:InputStream和OutputStream是字节输入输出流的抽象父类。Reader和Writer是字符输入和输出流的抽象父类。
按照是直接否从特定的地方(如磁盘,内存、设备)相连分为节点流和处理流
节点流:可以从一个或者向一个特定的地方(节点)读写数据;
处理流:对一个已经存在的流的连接和封装,通过封装的流的功能调用实现数据读写。处理流的构造总要带上其他流的对象作为参数。一个流的对象经过其他流的多次包装,称为流的链接。
1、InputStream
有三个方法访问其数据:
(1)int read(): 返回一个int值,它是从流中读取的一个字节,如果遇到文件结束返回-1.
(2)int read(byte []):将数据读到字节数组中,并返回读到的字节数。
(3)int read(byte [], int offest, int length):将数据读到字节数组中,并返回读到的字节数。offest为数组的偏移量。
其它常用的方法:close() available() skip() reset()
2、OutputStream
与InputStream相应的方法:write(int) write(byte[]) write(byte[],int,int)
flash():有时输入流在积累了若干次之后才真正的进行写操作,flash可强制进行写操作。
3、Reader
读取方法:
(1)int read(): 返回一个int值,它是从流中读取的一个字符,如果遇到文件结束返回-1.
(2)int read(char []):将数据读到字符数组中,并返回读到的字符数。
(3)int read(byte [], int offest, int length):将数据读到字符组中,并返回读到的字符数。offest为数组的偏移量。
4、Writer
write(char) write(char[]) write(char[],int,int),write(String,Stirng),write(Stirng,int,int),close(),flash()
对象的串行化(序列化)
1、实现接口java.io.Serializable。该接口没有任何方法,只作为一个标记,用来声明实现这个接口的类是可序列化的。
2、当一个对象被串行化,只有对象的数据被串行化,方法和构造函数不属于串行化流。如果一个数据变量是一个对象的引用,那么呢这个对象的数据成员也会被串行化。
节点流:
System.in/.out/.err 的返回值是PrintStream对象
ByteArrayInputStream 流的关闭无效(关闭后仍可使用,在内存中,可自动释放)
ByteArrayOutputStream 关闭流无效;可使用 toByteArray() 和 toString() 获取数据。
方法:writeTo(OutputStream out) 将此 byte 数组输出流的全部内容写入到指定的输出流参数中。
FileInputStream 文件输入流
FileOutputStream 文件输出流
处理流:
1、缓冲流,增强功能;BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
2、转换流,处理乱码 {
编码:字符----编码字符集--->>二进制
解码:二进制----解码字符集--->>字符
乱码原因:
(1)、编码与解码的字符集不同
(2)、字节数组长度不够
转换流:字节转换为字符
输出流 outputStreamWriter 编码
输入流 inputStreamReader 解码
3、数据输入及输出流
DataInputStream、DataOutputStream
1、读取顺序及类型与写入顺序及数据类型必须一致。
writeBytes(str); 字符串对象的第一种写法
writeChars(str); 字符串对象的第2种写法
writeUTF(sj11); 字符串对象的第3种写法,此方法用的较多
4、对象
反序列化 输入流 ObjectIntputStream 方法:readObject()
序列化 输出流 ObjectOutputStream 方法:writeObject()
注意:
1、先序列化后反序列化;反序列化顺序必须与序列化一致
2、不是所有的对象都可以序列化,transient dataType
5、打印流PrintStream
System.in/out/err 返回值为该类型
调试应用:可将控制台输出保存在文件中
Java的I/O总结的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- 修改release management client对应的服务器的地址
参考资料:http://stackoverflow.com/questions/25313053/how-to-change-a-release-management-server-name-in-r ...
- mysql vachar
--本文在CSDN文章的基础加以补充 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,va ...
- awakeFromNib、initWithCoder、initWithFrame三者区别
(1)awakeFromNib和initWithCoder:差别awakeFromNib 从xib或者storyboard加载完毕就会调用initWithCoder: 只要对象是从文件解析来的,就会调 ...
- DiskGenius(磁盘分区/数据恢复) 32位 V4.9.1 免费绿色版
软件名称: DiskGenius(磁盘分区/数据恢复) 32位 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 19.5MB 图片预览: 软件简介: Dis ...
- WPF Application
Application类作为启动的入口,在VS中,通常自动代码为我们继承了Application类,这样做的有点,我还没有理解到,但是我们先学到这个知识点. 为了能够更好的控制整个启动过程,包括得到A ...
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...
- TortoiseSVN 1.8 关于右键的设置
以前用SVN但都是 IDE 自己集成的插件,最近使用 android studio 发现居然自己不带SVN command line插件,非得自己单独装一个,于是使用了 TortoiseSVN ,但用 ...
- 使用 JUnit 报错 java.lang.Exception: No runnable methods
错误详情如下: java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validat ...
- MFC多线程各种线程用法 .
http://blog.csdn.net/qq61394323/article/details/9328301 一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleTh ...
- Zeppelin0.5.6使用hive解释器
此zeppelin为官方0.5.6版,可能还在孵化阶段,可能出现一些bug吧. 配置 cp zeppelin-env.sh.template zeppelin-env.sh vi zeppelin-e ...