OutputStreamWriter分析

写这个类的原因,网上有很多介绍这两个类的,InputStreamReader类的使用,没有任何异议,而OutputStreamWriter,看了网的帖子和博客说的都不是很清楚,所以小皮虾好好研究了一下OutputStreamWriter类,所以下面的总结有不对之处,欢迎指正!
api类中解释:
InputStreamReader 是字节流通向字符流的桥梁, 将字节流转换为字符流
OutputStreamWriter 是字符流通向字节流的桥梁,将字符流转换为字节流
一 、InputStreamReader类
1.引入InputStreamReader类
作用:它可以使用指定的charset 读取字节并将其解码为字符
其构造函数如下:
InputStreamReader (InputStream in)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader (InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader (InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader (InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
2.举例说明如下:
使用起来无异议,很容易明白,使用实例如下:
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

eg:class TransStreamDemo{
   public static void main(String[] args){
      //因为system中的in方法是system的静态方法public static final InputStream                   in
     // 所以可以向上转换为InputStream父类
     InputStream in = System.in;//读取键盘的输入
     //传入对象为in,将字节流转换为字符流Reader的对象isr
     InputStreamReader isr = new InputStreamReader(in);
     //System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()  
     //方法会在读取到使用者的换行字符时,再一次将整行字符串传入,所以使用BufferedReader类,可以提高读取字符的效率
       BufferdReader bufr =new BufferedReader(isr);
       String line = null;
       while((line = bufr.readline())!=null){

           System.out.println(line.toUpperCase);
       }
       bufr.close;
   }
}                   

二、 OutputStreamWriter类
1.引入OutputStreamWriter类
作用:可使用指定的charset 将要写入流中的字符编码成字节
其构造函数如下:
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。 OutputStreamWriter(OutputStream out,Charset cs)
创建使用给定字符集的 OutputStreamWriter。 OutputStreamWriter(OutputStream out,CharsetEncoder enc)
创建使用给定字符集编码器的 OutputStreamWriter。 OutputStreamWriter(OutputStream out,String charsetName)
创建使用指定字符集的 OutputStreamWriter。
2.举例说明如下:

eg:public static void transWriteByBuf() throws IOException {  
   //因为system中的in方法是system的静态方法public static final InputStream in
   // 所以可以向上转换为InputStream父类
   InputStream in = System.in;//读取键盘的输入
   //传入对象为in,将字节流转换为字符流Reader的对象isr
   InputStreamReader isr = new InputStreamReader(in);
   //System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了    BufferedReader来对使用者输入的字符进行缓冲。readLine()                       
   //方法会在读取到使用者的换行字符时,再一次将整行字符串传入,所以使用BufferedReader类,可以提高读取字符的效率
   BufferdReader bufr =new BufferedReader(isr);
   //将字符流转换为字节流
   // 因为system中的in方法是system的静态方法public static final OutputStream in,所以可以向上转换为OutputStream父类
   OutputStream out = System.out;//打印到控制台。   
   OutputStreamWriter osr = new OutputStreamWriter(out);//输出      
   BufferedWriter bufw = new BufferedWriter(osr);//缓冲  
   String line = null;
   while((line = bufr.readline())!=null)
   {
    //这个语句很重要,是把读到字符流写到osr字符流转换对象中,转换成字节流打印到控制台因为这是一个写的过程,与InputStreamReader 类相反,所以这个地方如果理解透了,也就真正的理解了OutputStreamWriter 类,而不是网上很多说的OutputStreamWriter 是 将字节流转换为字符流,所以api的解释一般是不会错,有时候是我们自己没有真的的理解。
       bufw.write(line);
       bufw.newline();
       bufw.flush();
       }
       bufr.close;

 }

“`

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的聊天服务器的代码实现。下面是代码的分析: 1. 创建一个服务器 ```java ServerSocket ss = new ServerSocket(9090); ``` 使用ServerSocket类创建一个服务器,并指定端口号为9090。 2. 等待客户端连接 ```java Socket sk = ss.accept(); ``` 使用ServerSocket的accept()方法,等待客户端连接。当客户端连接成功,accept()方法会返回一个Socket对象,该对象表示与客户端的连接。 3. 获取用户输入 ```java Scanner mys = new Scanner(System.in); System.out.println("请输入您要发送的信息:"); String str = mys.next(); ``` 使用Scanner类获取用户输入的信息,可以通过控制台输入。这里只是简单地演示了如何获取用户输入。 4. 发送消息到客户端 ```java OutputStream os = sk.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); bw.write(str); bw.newLine(); bw.flush(); ``` 获取客户端的输出流,使用BufferedWriter类将消息写入输出流中,并使用flush()方法刷新流。 5. 接收客户端的消息 ```java InputStream is = sk.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String sa = br.readLine(); System.out.println("客户端:"+sa); ``` 获取客户端的输入流,使用BufferedReader类读取输入流中的消息,并输出到控制台上。注意,这里使用了readLine()方法,它会一直阻塞等待客户端的输入,直到客户端输入了一行字符串并通过回车键结束输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值