java学习小记二

来源:互联网 发布:js json null空值处理 编辑:程序博客网 时间:2024/06/09 01:36

最近一直纠结于Java的IO中,刚开始看的一头雾水,各种Stream,各种Reader,各种Buffer。headache!

1,总的来说就包括InputStream 和 OutputStream 两个,具体应该用不到,都是用他们的派生类。

2,File 类的Object 可以是一个文件,也可以是一个directory/path。

3,Stream 是面向low-level的,而Reader/Writer是面向character的。

4,Whenever you want use readLine(),use BufferedReader。Other than this, DataInputStream is preferred choice。DataInputStream is offen used for getting primitives。

5,Old IO 不多说了。New IO应该说会比较常用,NIO 主要包括两个东东,非常重要,一个是channel,一个是ByteBuffer。将文件或者其它输入流都转化去Channel,对于文件用FileInputStream().getChannel(),或者FileOutputStream().getChannel(),或者RandomAccessFile().getChannel(),对于Socket 也可以用对应的方法处理成Channel。ByteBuffer主要面向bytes,主要方法是allocate()分配空间,filp()裁剪将capacity设置到limit,clear()重置,array(),hasRemaining()检查position和limit之间是否还有elements等。将channel的内容读入buffer用fc.read(buffer),将buffer写入channel用fc.write(buffer).

6,对于ByteBuffer有个static方法wrap,可以用于将某string.getBytes(),处理成byte[]。ByteBffer还是low-level的,可以用CharBffer,IntBuffer,DoubleBuffer等来抓化为易于处理的。这几个子类正常constructor时,都是Heap型的,都可以用array()方法,要是ByteBuffer使用asCharBuffer(),asIntBuffer,等转化来的,就不能用array()了。Heap型的,不会按照对应类型划分区域,每次使用时,按对应类型增加pos。而ByteBufferAs型的,就会按照对应的类型,将size划分成等大小的,每次pos+1。

7,对于CharBuffer等的,就可以用put(),get()等显示的写入或读取数据。

8,char、short   2bytes;int float 4bytes;double long 8bytes。

原创粉丝点击