A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

“OutputStreamWriter是字符流通向字节流的桥梁”怎么理解?
如果说这是字符流转换成字节流的话,那么new BufferedWriter(new OutputStreamWriter(System.out));这句话中为什么还使用了字符流的缓冲区呢??


6 个回复

倒序浏览
OutputStreamWriter是字符流通向字节流的桥梁。
new BufferedWriter(new OutputStreamWriter(System.out));
writer和OutputStream是写出去,BufferedWriter---> OutputStreamWriter---->OutputStream(System.out)。

InputStreamReader 是字节流通向字符流的桥梁。
注意一个是:字节流通向字符流,一个是:字符流通向字节流。读和写。
回复 使用道具 举报
阳阳啊  OutputStreamWriter 这个东西呢  叫转换流  实现把字节流转换为字符流的效果,还有对应的InputStreamReader是一样的。。。。
至于buffered 这个叫缓冲流,仔细看看里边的方法,对比一下,你会发现  字节流只能操作byte  字符流能操作char  缓冲流就可以操作字符串了,它最好用的就是readLine方法啦。
各有各的好处啦,用缓冲流比较方便,但是效率比较低,但是比如你搞个小游戏的话,就必须实用缓冲流了,我的小弹球游戏就是因为没实用双缓冲才卡的
回复 使用道具 举报
阳阳啊  OutputStreamWriter 这个东西呢  叫转换流  实现把字节流转换为字符流的效果,还有对应的InputStreamReader是一样的。。。。
至于buffered 这个叫缓冲流,仔细看看里边的方法,对比一下,你会发现  字节流只能操作byte  字符流能操作char  缓冲流就可以操作字符串了,它最好用的就是readLine方法啦。
各有各的好处啦,用缓冲流比较方便,但是效率比较低,但是比如你搞个小游戏的话,就必须实用缓冲流了,我的小弹球游戏就是因为没实用双缓冲才卡的
回复 使用道具 举报
此文档摘自API
An OutputStreamWriter is a bridge from character streams to byte streams: Characters written to it are encoded into bytes using a specified charset. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.

Each invocation of a write() method causes the encoding converter to be invoked on the given character(s). The resulting bytes are accumulated in a buffer before being written to the underlying output stream. The size of this buffer may be specified, but by default it is large enough for most purposes. Note that the characters passed to the write() methods are not buffered.
下面的是程序
package io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class DataOutputStreamtest1 {
       
        public static void main(String[] args) throws IOException {
                DataOutputStream  dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("f:/java.txt")));
                byte  b = 3;
                int a = 5;
                float fl = 1.49f;
                boolean bo = false;
               
                dos.write(b);
                //dos.write(a);
                dos.writeInt(a);
                dos.writeFloat(fl);
                dos.writeBoolean(bo);
               
                dos.close();
               
                InputStream is = new FileInputStream("f:/java.txt");
               
                int length ;
                byte[]  buffer = new byte[300];
               
                if(-1!= (length = is.read(buffer,0,300)));
               
                String str = new String(buffer,0,length);
               
                System.out.println(str);
                is.close();
               
                //读和写的顺序一定要保持严格一致
                DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("f:/java.txt")));
                System.out.println(dis.readByte());
                System.out.println(dis.readInt());
            System.out.println(dis.readFloat());
                System.out.println(dis.readBoolean());
                dis.close();
               
               
        }

}
写入文档的二进制编码是   ?靖R
回复 使用道具 举报
楼主 这是我自己的理解
之所以是是字符流通向字节流的桥梁,那身为桥梁那就是双向的 也可以字符向字节转化,那当然也可以是字节向字符转化了
首先 System.out输出的是PrintStream(打印流)——>是FileOutputStream的子类,而之所以用OutputStreamWriter转换流是因为要吧OutputStream(字节流)转化成FileWriter(字符流),而之所以转化的原意是为了使用BufferedWriter里边一些好用的方法比如毕老师说的newline()的等

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马