你需要注意的java小细节(二)

394 查看

这些都是一些小问题,但是有助于理解输入输出流。
InputStreamReader 中的一个 read()是每次只会从磁盘里面读取一个字节。它会非常频繁的访问磁盘。(想一想,每次只从磁盘读一个字节)
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

 BufferedReader in
   = new BufferedReader(new InputStreamReader
import java.io.*;
import java.io.DataInputStream;
public  class   Main{
    public static void main(String[] args) throws  Exception {

      BufferedReader   reader= new BufferedReader(new InputStreamReader(new FileInputStream(new File("text.txt"))));

String line=null;
 while((line=reader.readLine())!=null){
     String[]  s=line.split("\\s+");

     for ( String single:s ) {
           System.out.println(single);
     }
    
 }
    }
}                                                                                                                                                                  

(System.in));
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格

Java的重定向
JAVA支持标准的输出输入重定向。

public  class   Main{
    public static void main(String[] args) throws  Exception {

       System.out.println("Hello World!");

    }
}                                                                                                                                                                  

编译以后,直接使用java Main >test.txt进行输出重定向

使用输入重定向:

public  class   Main{
    public static void main(String[] args) throws  Exception {
         Scanner sc=new Scanner(System.in);  
        while(sc.hasNextLine())  
        {  
            System.out.println(sc.nextLine());  
        }  
    }
}                                                                                                                                                                  
java  Main<text.txt;