Thursday, August 27, 2015

Java I/O工作机制介绍 | 且码且珍惜



Java I/O工作机制介绍 | 且码且珍惜
Java 的 I/O 操作类在包 java.io 下,大概有将近 80 个类,但是这些类大概可以分成四组,分别是:
  1. 基于字节操作的 I/O 接口:InputStream 和 OutputStream
  2. 基于字符操作的 I/O 接口:Writer 和 Reader
  3. 基于磁盘操作的 I/O 接口:File
  4. 基于网络操作的 I/O 接口:Socket
前两组主要是根据传输数据的数据格式,后两组主要是根据传输数据的方式, I/O 的核心问题要么是数据格式影响 I/O 操作,要么是传输方式影响 I/O操作,也就是将什么样的数据写到什么地方的问题,I/O 只是人与机器或者机器与机器交互的手段,除了在它们能够完成这个交互功能外,我们关注的就是如何提高它的运行效率了,而数据格式和传输方式是影响效率最关键的因素了。

java IO 备忘录
判断是字节流还是字符流
字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

FileReader和FileWriter
FileReader能够以字符流的形式读取文件内容。除了读取的单位不同之外(译者注:FileReader读取字符,FileInputStream读取字节),FileReader与FileInputStream并无太大差异
FileReader不提供指定明确编码的构造函数,所以通常推荐利用InputStreamReader配合FileInputStream来替代FileReader利用BufferedInputStream、BufferedOutputStream加速读取

BufferedInputStream支持mark() and reset()操作
并非所有
InputStream
子类支持这两个方法

PushbackInputStream
PushbackInputStream 可以回退读取的字节信息。
有时候你需要提前知道接下来将要读取到的字节内容,才能判断用何种方式进行数据解析。
input.unread(data);
DataInputStream
DataInputStream可以让你直接读取java的基础类型而不是字节从InputStream。这通常是非常有效率的,当你要读取的数据比一个字节还大的时候,并且DataInputStream通常是和DataOutputStream一起使用的。

ObjectInputStream
ObjectInputStream可以将Object读入,相反ObjectOutpustStream将序列化后的(implements Serializable)Object写出

LineNumberReader
按行读取数据,可以指定读取的行数或是获取当前读取数据的行数。
StringReader
读取String数据
写String数据

Read full article from Java I/O工作机制介绍 | 且码且珍惜

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts