java笔记:输入输出流(IO流)

------------------用于封装以字节为导向的InputStream
1) DataInputStream:从二进制流中读取基本类型(int、char等)数据。
  
    2) BufferedInputStream:使用缓冲区
  
    3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
  
    4) PushbackInputStream:很少用到,一般用于编译器开发
 ---------------- 用于封装以字符为导向的InputStream
  
    1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
  
    2) BufferedReader:与BufferedInputStream对应
  
    3) LineNumberReader:与LineNumberInputStream对应
  
    4) PushBackReader:与PushbackInputStream对应
  
    2.3 FilterOutStream的各种类型
  
------------------用于封装以字节为导向的OutputStream
  
    1) DataOutStream:往stream中输出基本类型(int、char等)数据。
  
    2) BufferedOutStream:使用缓冲区
  
    3) PrintStream:产生格式化输出(与PrintWrite有一定区别)
------------------用于输出字符时还可以用扫描器实现
        InputStream inStream = new InputStream(socket s.getInputStream());
        OutputStream outStream = new OutputStream(socket s.getOutputStream());
        Scanner in = new Scanner(inStream);
        PrintWriter out = new PrintWriter(outStream,true);
        if(in.hasNextLine)
        String line = in.nextLine();
        out.println(line);
一个程序通过socket要输入数据,那就是两种情况:
1:DataInputStream(socket s.getInputStream())
2:BufferedReader(InputStreamReader(socket s.getInputStream()))
或者也可以这样:
3:BufferedInputStream(socket s.getInputStream())
我理解就这三种,第一种和第三种是以字节为基础的。第二种是转换为了字符,然后以字符为基础的。后两种都有一个挺好的方法:readLine(),第一种的readLine()过时了。
注:readLine()在遇到回车换行(\n,\r,\r\n都可以)时才返回。所以如果你不输入回车,即使显示的字符已经换行(控制台窗口)也不会返回。readLine()会一直阻塞~知道遇到回车换行。


read/writer即为字符流
Stream为字节流
字符流可以输入或输出象@#¥%……一样的字符,并可以适应系统编码
字节流即为把相应内存以字节的形式发送,一般无法适应编码,可用于传送基本数据类型

参考:
(Thinking in Java 第十章)IO 流
http://www.wangchao.net.cn/bbsdetail_21046.html


你可能感兴趣的:(java,IO)