------------------------------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) |
问题:
通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。
也就是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.youkuaiyun.com/heima