------------------用于封装以字节为导向的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