概念: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总结相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

  10. 科学处理java.lang.StackOverflowError: null异常

    java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...

最新文章

  1. 软件开发是一门手艺活
  2. os-cocos2d游戏开发基础-进度条-开发笔记
  3. Windows Server 2003 R2 修复Windows Server 2003
  4. TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?
  5. poj 3378 Crazy Thairs
  6. 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
  7. Change code to ensure that OPA5 work also in WebIDE
  8. java给qq发消息_QQ发送消息
  9. 【Docker】Asp.net core在docker容器中的端口问题
  10. 对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。
  11. 优酷背后的大数据秘密:资源弹性,可支撑EB级存储
  12. orcle mysql 查询_Oracle与Mysql的高级查询与难点sql
  13. android volley框架详解,android通信框架volley详解(一)
  14. layui表单验证,表单提交的若干个方法
  15. java冒泡排序代码详解
  16. Vue项目中引用‘阿里巴巴字体图标库iconfont’
  17. 2017年第十七届迪培思广州国际广告展会刊(参展商名录)
  18. D1net阅闻:亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务
  19. 实测!Ubuntu18.04解决Teamview检测为商用问题
  20. CISCO banner MOTD, Login的区别

热门文章

  1. [存]超酷JS拖拽翻页效果
  2. 小程序web开发框架-weweb介绍 1
  3. Java RESTful Web Service实战(第2版) 2.3 传输格式
  4. refresh-刷新
  5. Android数据存储(1):SharedPreferences
  6. 使用IIS 7.0 Smooth Streaming 优化视频服务
  7. 用CMake编译lua
  8. Java开发设计——UML类图
  9. Leetcode 746.使用最小花费爬楼梯
  10. kafak 命令使用