黑马程序员_IO流-转换流的学习
2012-06-23 10:08
435 查看
------------------------------android培训、java培训、期待与您交流! ----------------------------------------------------------------
转换流:
InputStreamReader,OutputStreamWriter
转换流的由来
• 字符流与字节流之间的桥梁
• 方便了字符流与字节流之间的操作
转换流的应用
• 字节流中的数据都是字符时,转成字符流操作
更高效。
例程:标准输入输出。
需求:通过键盘录入数据。当录入一行数据后,就将该行数据进行打印。如果录入的数据是over,那么停止录入。
标准输入输出流: 读取键盘录入, 显示在显示器上.
System.out:对应的是标准输出设备,控制台。System.out的类型是PrintStream
System.in:对应的标准输入设备:键盘。System.in的类型是InputStream.
import java.io.*;
class ReadIn
{
publicstatic void main(String[] args) throws IOException
{
InputStream in = System.in;
StringBuilder sb = new StringBuilder();//定义一个String的缓冲区.
/*类 StringBuffer
线程安全的可变字符序列。一个类似于
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());
}
else
sb.append((char)ch);
}
}
}
类 InputStream中有:
问题:
通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。
也就是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
转换流:
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
相关文章推荐
- 黑马程序员 java学习笔记 Day5:IO流、字符流、字节流
- 黑马程序员-----关于IO流学习日志
- 黑马程序员__关于学习IO流中的字节流的总结
- 黑马程序员_基础_IO流学习笔记_File对象功能
- 黑马程序员——基础学习日记(IO流)
- 黑马程序员—18—java基础:有关IO流的学习笔记和学习心得体会
- 黑马程序员——IO流学习笔记
- 黑马程序员_IO流学习心得
- 黑马程序员---黑马IO流学习笔记
- 黑马程序员——IO流(三)字节流、字符流、转换流
- 黑马程序员_IO流_字符流,转换流
- 黑马程序员------学习笔记(5)IO流中字节流操作
- 黑马程序员—Java基础学习笔记之数据类型转换(自动转换和强制转换)
- 黑马程序员--学习笔记(IO流一)
- IO流的学习-转换流
- 黑马程序员_java基础学习笔记07_IO流
- 黑马程序员_java基础学习笔记08_IO流
- 黑马程序员-IO流学习笔记-2
- 黑马程序员 java学习笔记3-IO流之字节流与装饰设计模式
- 黑马程序员-8-java-IO流知识点串讲(2)-字节流及字节字符转换流