本文共 1269 字,大约阅读时间需要 4 分钟。
按照读写数据的基本单位不同,流可以分为字节流和字符流。
从读写方向的角度看,流分为输入流和输出流。
根据流的角色不同,流可以分为节点流和处理流。
以下是不同类型流的对应关系:
| 分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
|---|---|---|---|---|
| 抽象基类 | 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是Java关键字,用来表示属性不会被序列化。当对象被序列化时,transient属性的值不会被包含在序列化表示中。transient字段的生命周期仅存在于内存中,不会被写入存储设备。
帮助理解:为了保障数据安全,如操作账号和密码等敏感信息不希望被序列化,可以将这些属性加上transient关键字。
转载地址:http://qvdr.baihongyu.com/