博客
关于我
JavaSE基础系列之IO流
阅读量:358 次
发布时间:2019-03-04

本文共 1269 字,大约阅读时间需要 4 分钟。

一. IO流分类

按照读写数据的基本单位不同,流可以分为字节流和字符流。

  • 字节流:以字节为单位读写数据,适用于处理任意类型的文件。
  • 字符流:以字符(2字节)为单位读写数据,主要用于处理文本文件。

从读写方向的角度看,流分为输入流和输出流。

  • 输入流:从文件中读取数据输入程序。
  • 输出流:将程序中的数据输出到文件中。

根据流的角色不同,流可以分为节点流和处理流。

  • 节点流:直接与输入输出源对接的流。
  • 处理流:建立在节点流基础上的流,通常用于更复杂的数据处理。

以下是不同类型流的对应关系:

分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputStream OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
访问字符串 -- -- StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流 -- -- InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream -- --
Filter输入流 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流 -- PrintStream -- PrintWriter
推回输入流 PushbackInputStream -- PushbackReader --
特殊流 DataInputStream DataOutputStream -- --

二. 缓冲流的优缺点

优点:减少了写入次数,提高了数据传输效率。

缺点:带缓冲的流会导致接收端可能无法及时获取数据。

三. 序列化版本号作用

序列化机制通过检查serialVersionUID来验证版本一致性。当反序列化时,JVM会将传入的serialVersionUID与本地类的serialVersionUID进行比较,若不一致则抛出异常。

四. transient关键字

transient是Java关键字,用来表示属性不会被序列化。当对象被序列化时,transient属性的值不会被包含在序列化表示中。transient字段的生命周期仅存在于内存中,不会被写入存储设备。

帮助理解:为了保障数据安全,如操作账号和密码等敏感信息不希望被序列化,可以将这些属性加上transient关键字。

转载地址:http://qvdr.baihongyu.com/

你可能感兴趣的文章
org.apache.dubbo.common.serialize.SerializationException: com.alibaba.fastjson2.JSONException: not s
查看>>
sqlserver学习笔记(三)—— 为数据库添加新的用户
查看>>
org.apache.http.conn.HttpHostConnectException: Connection to refused
查看>>
org.apache.ibatis.binding.BindingException: Invalid bound statement错误一例
查看>>
org.apache.ibatis.exceptions.PersistenceException:
查看>>
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
查看>>
org.apache.ibatis.type.TypeException: Could not resolve type alias 'xxxx'异常
查看>>
org.apache.poi.hssf.util.Region
查看>>
org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;
查看>>
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /
查看>>
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest'
查看>>
org.hibernate.HibernateException: Unable to get the default Bean Validation factory
查看>>
org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
查看>>
org.springframework.amqp.AmqpConnectException:java.net.ConnectException:Connection timed out:connect
查看>>
org.springframework.beans.factory.BeanDefinitionStoreException
查看>>
org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
查看>>
org.springframework.boot:spring boot maven plugin丢失---SpringCloud Alibaba_若依微服务框架改造_--工作笔记012
查看>>
SQL-CLR 类型映射 (LINQ to SQL)
查看>>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
查看>>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
查看>>