java中实现输入输出的操作就需要IO流
I/O流按照流的方向分为输入流(InputStream)和输出流(OutputStream)
I/O流按照数据单位
·字符流 操作的数据单元是8位的字节。InputStream、OutputStream作为抽象基类。
·字节流 操作的数据单元是字符。以Writer、Reader作为抽象基类。
很明显可以看出来字符流只能处理纯文本的数据,而字符流则任意文件都可以处理
IO流中的三类数据源
基于磁盘文件:FileInputStream、FileOutputSteam、FileReader、FileWriter
基于内存:ByteArrayInputStream ByteArrayOutputStream(ps:字节数组都是在内存中产生)
基于网络:SocketInputStream、SocketOutputStream(ps:网络通信时传输数据)
主要介绍字节流
1.InputStream、OutputStream
其是所有字节输入输出类的超类
system.in :println()就是java.io.PrintStream类里的一个方法,它的作用是向控制台输出信息。因为System.out是java.io.PrintStream类的实例的引用,所以可以通过 System.out.println(); 来调用此方法。
2.InputStreamReader
InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,请考虑在BufferedReader中包InputStreamReader
3.InputReader PrintWrite 是字符打印和输出流
4.BufferedReader 字符缓冲输入流
//模板 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.StringTokenizer; class Main{ public static void main(String[] args) throws IOException { // public static InputReader in = new InputReader(System.in); 输入是重点 // public static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); 直接将字节流变成字符流 InputReader in =new InputReader(System.in); PrintWriter out = new PrintWriter(System.out); String aString = in.next(); System.out.println(aString.length()); out.flush(); out.close(); } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public double nextDouble() { return Double.parseDouble(next()); } } }