这些都是一些小问题,可是有助于理解输入输出流。
InputStreamReader 中的一个 read()是每次只会从磁盘里面读取一个字节。它会很是频繁的访问磁盘。(想想,每次只从磁盘读一个字节)
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集能够由名称指定或显式给定,或者能够接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会致使从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,能够提早从底层流读取更多的字节,使其超过知足当前读取操做所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:java
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),换行符,中文全角空格code
Java的重定向
JAVA支持标准的输出输入重定向。it
public class Main{ public static void main(String[] args) throws Exception { System.out.println("Hello World!"); } }
编译之后,直接使用java Main >test.txt进行输出重定向io
使用输入重定向:编译
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;