关于Java中的流

     Java2中定义了两种类型的流:字节流和字符流。

    字节流为处理字节的输入输出提供了方便的方法。字符流为字符的输入输出处理提供了方便。它们采用了统一的编码标准,因而可以实现国际化。但是在最底层,所有的输入输出都是字节形式的。基于字符的流只为处理字符提供方便的方法。

    字节流在底层有两个抽象类InputStream和OutputStream,每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。

    Java能正确处理UNIX和Windows/DOS约定的路径分割符。如果在Windows版本的Java下用下划线(/),路径处理依然正确(可以理解为Java已经为这些路径符号串进行了相应的处理翻译)。但是,必须记住,如果在Windows/DOS系统中使用反斜线(\),则需要在字符串内使用它的转义序列(\\),因为Java使用反斜线作为转义符号。

    OutputStream继承了Object方法,实现了Closeable和Flushable接口,Flushable接口中定义了一个方法flush(),调用该方法会立即输出缓冲区中的数据,这对有些要实时传输数据的函数是很有用的。

    InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或者显示给定,否则接受平台默认的字符集。

    为了达到最高的传输效率,可以考虑在BufferedReader内包装InputStreamReader,如:

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

    BufferedReader中提供了读取一行的方法readLine()。

    readLine方法用于读取一行字符。一行字符是以回车符('\r'),换行符('\n')或者回车换行符('\r\n')结尾的字符串,方法返回的字符串并不包括这些行终止符。

    执行readLine方法,如果没有数据但还没有读取到输入流末尾(比如在socket通信中),会一直阻塞直到有数据读取为止,而不会返回null。但是如果在文件类的输入流中,读取到文件末尾就会返回null。

你可能感兴趣的:(关于Java中的流)