java io(1)

分4块来学习java I/O。

基于字符的:InputStream,OutputStream

基于字节的:Writer,Reader

基于磁盘的:File

基于网络的:Socket

前两个是传输数据的数据格式,后面两个是传输数据的方式。

有IDEA的同学,跟着我一起做,没有IDEA的同学,下载安装好以后跟着我一起做。不想动手跟着一起做的,想象着跟我一起做。

1、Ctrl+N,找到InputStream这个类,类名上右键Diagrams->Show Diagram...

2、删除其他的类,选中inputStream,Ctrl+Alt+B,搜索下图中的类,加到图中,重复直到加载到下图中的所有类。

3、处女座同学请按F5,以减轻不适感。非处女座同学请自便,不过我也建议你F5一下。

然后,每个类分别选中后按F4进去看注释。。。然后请英语好的同学指出我翻译的错误之处。。

ObjectInputStream:1、这货deserialize 那些之前被其好基友ObjectOutputStream给写过的primitive数据或者objects。请配对使用。2、这货除了用来还原基友搞得事情,还可以用socket在主机间传对象,还可以在远程交流的时候marshal以及unmarshal参数和参数。(自己百度parameter和argument的区别)3、你要序列化,你要jvm里有相关的类。4、readObject读出来自行强转成需要的格式,Strting和数组在这里是正经Object,至于那些低级的primitive,会报错的。primitive可以用DataInput的适当方法取出来。6、transient和static的会被无情地无视掉。引用的其他类也会被读的,deserialize 总是新申请地儿来放Object。很纯洁不会污染。No-arg constructors are invoked for the non-serializable classes这句话没看懂。

FileInputStream:文件好理解不解释。

BufferedInputStream:可以指定一个buffer的大小,提高传输速率的,原理上让人联想到nio,事实上网上一些测试也说性能跟nio差别不大,在两个都能达到目的的场景下用这货会比较简单些。

DataInputStream:其实就是语法糖,底层传的都是byte,用这货的好处是可以不用记各个primitive类型占了几个坑,怎么进怎么出就行。

PipedInputStream:跨线程搞事情,生产者消费者模型。

同理作图:

内部通过StringEncoder和CharSet进行转化,转出来乱码的话自己去调编码。



时间: 2024-12-28 00:05:07

java io(1)的相关文章

高级Java工程师必备 ----- 深入分析 Java IO (三)

概述 Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件.控制台.网络),我们还要考虑具体和它们的通信方式(顺序.随机.二进制.按字符.按字.按行等等).Java类库的设计者通过设计大量的类来攻克这些难题,这些类就位于java.io包中. 在JDK1.4之后,为了提高Java IO的效率,Java又提供了一套新的IO,Java New IO简称Jav

疯狂Java学习笔记(54)----------详解Java IO(全面)

流的大家族 流(stream)的概念: 源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL. 流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流. 用户可以从输入流中读取信息,但不能写它.相反,对输出流,只能往输入流写,而不能读它. 实际上,流的源端和目的端可简单地看成是字节的生产者和消

java io (一)

对于文件内容的操作主要分为两大类 分别是:字符流 字节流 其中,字符流有两个抽象类:Writer   Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率 同样,字节流也有两个抽象类:InputStream   OutputStream 其对应子类有FileInputStream和FileOutputStream实现文件读写 BufferedInputStream和Buf

Java IO(二)

常用类 1,节点流类型 类型 字符流 字节流 File(文件) FileReader FileWriter FileInputStream FileOutputStream Memory Array CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputStream Memory String StringReader StringWriter --- Pipe(管道,线程) PipedReader PipedWr

Java IO(1)基础知识——字节与字符

正所谓怕什么来什么,这是知名的“墨菲定律”.Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员.工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往只是“无他唯熟尔”——熟手而已. IO这块我确实怕,它不难,只有两个方面:输入/输出.但你说它用得多不多,我相信没有你写的并发多,并发往往是处处可见,写着写着就熟了,而IO却往往只是某个模块会涉及,所以也就并不是每个程序员在开发维护自己的模块时都会用到有关IO的API,而碰到的时候常常陷入窘迫,不知

高级Java工程师必备 ----- 深入分析 Java IO (一)BIO

BIO编程 最原始BIO 网络编程的基本模型是C/S模型,即两个进程间的通信. 服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信. 传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口:Socket负责发起连接操作.连接成功后,双方通过输入和输出流进行同步阻塞式通信.最原始BIO通信模型图: 存在的问题: 同一时间,服务器只能接受来自于客户端A的请求信息:虽然客户端A和客户端B

java io(2)

磁盘io工作机制 1.标准方式 物理磁盘<-->内核空间<-->用户地址空间 2.直接I/O 物理磁盘<-->用户地址空间 数据库是这么干的,从同样是系统软件的角度来看,数据库是跟操作系统平起平坐的. 3.内存映射 物理磁盘<-->内核空间===用户地址空间 2跟3没有真正理解其区别,网上也没找到资料. 性能比较:代码来源ThinKing in java 1 package pers.jing.io; 2 3 import java.io.*; 4 impo

Java IO(五)- 数据流

数据流 DataInputStream 和DataOutputStream分别继承自InputStream 和 OutputStream,它属于处理流,需要分别套接在InputStream 和 OutputStream类型的节点流上. DataInputStream 和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法. DataInputStream 和DataOutputStream的构造方法: DataInputStream(

Java IO(四)- 转换流

转换流 InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换. InputStreamReader需要和InputStream套接(把InputStream转换成InputStreamReader) OutputStreamWriter需要和OutputStream套接(把OutputStreamWriter转换成OutputStream) 转换流在构造时可以指定其编码集合,例如: InputStream is = new InputStrea