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 返回值为该类型
调试应用:可将控制台输出保存在文件中
转载于:https://www.cnblogs.com/huwtylv/p/3935802.html
Java的I/O总结相关推荐
- springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...
- Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几
Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常
kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...
- Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid
Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...
- 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码
java开发必知必会之看源码,而看源码的第一步则是找到源码
- java基本类型转换,随记
java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...
- 科学处理java.lang.StackOverflowError: null异常
java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...
最新文章
- 软件开发是一门手艺活
- os-cocos2d游戏开发基础-进度条-开发笔记
- Windows Server 2003 R2 修复Windows Server 2003
- TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?
- poj 3378 Crazy Thairs
- 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
- Change code to ensure that OPA5 work also in WebIDE
- java给qq发消息_QQ发送消息
- 【Docker】Asp.net core在docker容器中的端口问题
- 对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。
- 优酷背后的大数据秘密:资源弹性,可支撑EB级存储
- orcle mysql 查询_Oracle与Mysql的高级查询与难点sql
- android volley框架详解,android通信框架volley详解(一)
- layui表单验证,表单提交的若干个方法
- java冒泡排序代码详解
- Vue项目中引用‘阿里巴巴字体图标库iconfont’
- 2017年第十七届迪培思广州国际广告展会刊(参展商名录)
- D1net阅闻:亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务
- 实测!Ubuntu18.04解决Teamview检测为商用问题
- CISCO banner MOTD, Login的区别