Chinaunix首页 | 论坛 | 博客
  • 博客访问: 321635
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1387
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-24 10:12
文章分类
文章存档

2014年(18)

2013年(32)

分类: 网络与安全

2014-01-25 11:08:48

首先,InputStream和OutputStream是最基础的两个流接口。


   InputStream:

       abstract int read() 读取一个字节,返回读入的字节,在遇到流结尾时返回-1.

   OutputStream:

       abstract void write(int b)  写出一个字节。

   上面两个接口的两个方法在执行的时候都会将当前线程阻塞,直到字节被读入或写出。不过在当前线程阻塞的时候可以让其他线程做事。

   available是InputStream借口的方法,作用是检查当前可用读入的字节数量。

   

   在使用流的使用应该注意使用完毕后调用close方法来关闭它,以释放珍贵的操作系统资源。而输出流在被关闭的时候,也会将输出流的缓存区给清空,并且将所有临时置于缓冲区中,以便用更大的包的形式传递的字符在关闭输出流时将被送出。如果不关闭文件,那么输出的缓存区将不会被送出。

   虽然read和write方法是原生的但是我们操作的数据并不是字节所以我们需要扩展这些方法。

   抽象类Reader和Writer类,用于处理Unicode文本,也是具有read和write方法,不过返回的不是字节,而是Uncoide码元(一个 0~65535的整数),这两个类的子类可以很好的处理文本数据的读写。

   

   一些流可以从文件或者其他位置地方获取字节,另一些流则可以将字节变成有用的数据类型,这样一来可以将流嵌套来使用,达成更强大的功能。


   下面来介绍一些流

       FileInputStream:用于读取文件。

       BufferedInputStream:带缓冲区的读入流。

       PushbackInputStream:可回推流,可以预读数据,并且判断是否是所需要的。

       ByteArrayInputStream:从内存中读数据。        


       FileOutputStream:用于文件的写入。

       BufferedOutputStream:带缓冲区的写出流。

       ByteArrayOutputStream:将数据输出到内存中。        


       其中,带缓冲区的流是比较好的,因为它会在内存中预置一块空间,存储数据,当数据到一定数量的时候,它才会一次性写出,这样如果是与外部设备交互的话,效率更好。

       

   文本输入与输出:

       在保存数据的时候,一个数字,例如:123,我们可以存成文本形式的123,也可以存储成二进制数据,存储为二进制数据可以更高效的利用,唯一的缺点是不容易看。所以选择哪个完全是视情况而定。

   

   下面是文本操作的相关类:

       PrintWriter:

       FileWriter:

       OutputStreamWriter:

       BufferedWriter:        


       InputStreamReader:

       BufferedReader:


   在使用Writer和Reader子类的时候需要注意的时字节转成字符是需要字符编码的。


   Charset:字符集类,采用IANA字符集注册中心标准化的字符集名字。

       static SortedMap availableCharsets() 可以返回虚拟机所有可用的字符集SortedMap是一个映射表,键是字符集的名字,值是字符集。

       static Charset forName(String name) 获取给定名字的字符集。

       Set aliases()    返回这个字符集的别名集

       ByteBuffer encode(String str)    将给定的字符串编码为字节序列

       CharBuffer decode(ByteBuffer buffer)    解码给定的字节序列。无法识别的输入将被转换成Unicode的“替代字符”('\uFFD')


   ByteBuffer:字节缓存区

       byte[] array() 返回这个缓冲区管理的字节数组

       static ByteBuffer wrap(byte[] bytes)

       static ByteBuffer wrap(byte[] bytes, int offset, int length)

       返回管理给定的字节数组或给定字节数组的某个范围的字节缓存区


   CharBuffer:字符缓冲区

       char[] array()            返回这个缓冲区所管理的码元组

       char charAt(int index)    返回给定索引处的码元

       String toString()         返回由这个缓冲区所管理的码元构成的字符串


   二进制数据读写

       DataOutput和DataInput用于二进制与基本数据类型的转换


   随机访问文件

       RandomAccessFile:这个类同时能完成读写操作,读写操作都是实现DataOutput和DataInput来的,可以通过seek来跳到指定的位置。

       RandomAccessFile(String file, String mode)

       RandomAccessFile(File file, String mode)

       参数:

           file 打开的文件

           mode "r"表示只读 "rw"表示读写模式 "rws"表示每次更新都对数据和元数据的写磁盘操作进行同步的读写模式 rwd表示每次更新时,支队数据的写磁盘操作进行同步的读写模式。

       long getFilePointer()

           返回文件指针当前位置

       void seek(long pos)

           将文件指针从文件的开始设置到pos个字节处

       long length()

           返回文件按照字节来度量的单位


   ZIP文档读写

       ZipInputStream

           ZipEntry getNextEntry()

           void closeEntry()

       ZipOutputStream

           

===================================未完待续====================
阅读(1643) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~