您的位置:首页 > 职场人生

黑马程序员_IO流-转换流的学习

2012-06-23 10:08 435 查看
------------------------------android培训java培训期待与您交流! ----------------------------------------------------------------

转换流:

InputStreamReader,OutputStreamWriter

转换流的由来

• 字符流与字节流之间的桥梁

• 方便了字符流与字节流之间的操作

 

转换流的应用

• 字节流中的数据都是字符时,转成字符流操作

更高效。

 例程:标准输入输出。

 

需求:通过键盘录入数据。当录入一行数据后,就将该行数据进行打印。如果录入的数据是over,那么停止录入。

 

标准输入输出流: 读取键盘录入, 显示在显示器上.

System.out:对应的是标准输出设备,控制台。System.out的类型是PrintStream

java.lang.Object

  java.io.OutputStream

      java.io.FilterOutputStream

          java.io.PrintStream

 

System.in:对应的标准输入设备:键盘。System.in的类型是InputStream.

java.lang.Object

  java.io.InputStream

 

 

import java.io.*;

class ReadIn

{

       publicstatic void main(String[] args) throws IOException

       {

              InputStream in = System.in;

              StringBuilder sb = new StringBuilder();//定义一个String的缓冲区.

  /*类 StringBuffer

线程安全的可变字符序列。一个类似于
String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

public StringtoString()
返回此序列中数据的字符串表示形式.  */
 

              while(true)

              {

                     int ch = in.read();//类型转换了,byteàint

                     if(ch=='\r')

                            continue;

                     if(ch=='\n')

                     {

                            Strings = sb.toString();

                            if("over".equals(s))

                                   break;

                            System.out.println(s.toUpperCase());

             sb.delete(0,sb.length());//清空缓冲区,返回的还是StringBuffer

 

                     }

                     else

                            sb.append((char)ch);

 

              }

       }

}

 

类 InputStream中有:

abstract  int
read()

          从输入流读取下一个数据字节。
 int
read(byte[] b)

          从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。
 

问题:

 

通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。

也就是readLine方法。

能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?

 

需求: 使用readLine方法来完成键盘录入的一行数据的读取

readLine方法是字符流BufferedReader类中的方法。

而键盘录入的read方法是字节流InputStream的方法。

那么能不能将字节流转成字符流在使用字符流缓冲去的readLine方法呢?

 

类 InputStreamReader:
是字节流通向字符流的桥梁

 

 

import java.io.*;

 

class TransStreamDemo

{

       publicstatic void main(String[] args) throws IOException

       {

              //获取键盘录入对象。

              InputStreamin = System.in;

 

              //将字节流对象转成字符流对象,使用转换流。InputStreamReader

              InputStreamReaderisr = new InputStreamReader(in);

 

              //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

 

              BufferedReaderbufr = new BufferedReader(isr);// BufferedReader是字符流的缓冲区

 

//键盘的最常见写法。以上三步合成一步:

              //BufferedReader bufr =

                            //new BufferedReader(newInputStreamReader(System.in));

             

              Stringline = null;

 

              while((line=bufr.readLine())!=null)// 一次读一行.

              {

                     if("over".equals(line))//自定义结束标记.

                            break;

                     System.out.plantln(line.toUpperCase())

/*

public String toUpperCase()
使用默认语言环境的规则将此String 中的所有字符都转换为大写。
*/

              }

 

              bufr.close();

 

       }

}

 

 

 

OutputStreamWriter 是字符流通向字节流的桥梁:

 

import java.io.*;

 

class TransStreamDemo

{

       publicstatic void main(String[] args) throws IOException

       {

 

 

 

 

              OutputStreamout = System.out;

              OutputStreamWriterosw = new OutputStreamWriter(out);//将OutputStream包装,装饰了之后可以直接调用 osw.write(line.toUpperCase());

 

              BufferedWriter bufw = new BufferedWriter(osw);

       //     BufferedWriter bufw = newBufferedWriter(new OutputStreamWriter(System.out));//三步合成一步.

 

String line = null;

 

              while((line=bufr.readLine())!=null)

              {

                     if("over".equals(line))

                            break;

                     bufw.write(line.toUpperCase());

                     bufw.newLine();//换行是BufferedWriter的方法,必须将OutputStreamWriter再次包装成BufferedWriter

                     bufw.flush();

              }

 

              bufr.close();

 

       }

}

 

 

 

 

-----------------------------android培训java培训期待与您交流! ----详细请查看:http://edu.csdn.net/heima

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io string null import byte java