黑马程序员_10字节流、字符流、转换流、控制流、数据流、字节数组流

------- android培训ios培训、期待与您交流! ----------
一、流简介
按数据流的方向不同分: 输入流 输出流
按处理数据单位不同分: 字节流 字符流

按照功能不同可以分为:
节点流:InputStream OutputStream 直接跟数据源相连接 ,节点流为可以从一个特定的数据源(节点)读写数据(如:文件、内存)
处理流:处理流是“连接”在已经存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能

1、 缓冲流---- BufferedInputStream 、BufferedOutputStream、BufferedReader、BufferedWriter
2、 转换流----InputStreamReader、OutputStreamWriter ,经过将节点流进行转换,可以直接一个字符串直接写入文件或者读出文件
二、转换流实例
        //转换流实例1
import java.io.*;
public class TestTransForm2{
 public static void main(String[] args){
  try{
   InputStreamReader isr = new InputStreamReader(System.in);
   BufferedReader br=new BufferedReader(isr);
   String s = null;
   s = br.readLine();
   while(s!=null){
 //这里如果方法名写错  ignore 容易写成ingore,给出的错误提示如图1所示
    if(s.equals IgnoreCase("exit")) break; 
    System.out.println(s.toUpperCase());
    s=br.readLine();
   }
   br.close();
  }catch(IOException e){
   e.printStackTrace();
  }
 }
}
图1 方法名称写错的错误提示

//转换流实例2
import java.io.*;
public class TestTransForm1{
 public static void main(String[] args){
  try{
   OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream("transform.txt"));
   osw.write("sdfsdfsdfsdfdsfdsfds");
   System.out.println(osw.getEncoding());
   osw.close();
   //设定文件末尾追加为True,同时指定文件存储编码为ISO8859_1
   osw=new OutputStreamWriter(new FileOutputStream("transform.txt",true),"ISO8859_1");
   osw.write("sfssfsdfsdfsdfsdfsfsd");
   System.out.println(osw.getEncoding());
   osw.close();
  }catch(IOException e){
   e.printStackTrace();
  }
 }

三、字节流实例
//字节流实例1
import java.io.*;
public class TestFileInputStream{
 public static void main(String[] args){
  FileInputStream fis = null;
  int b=0;
  int num=0;
  try{
   fis=new FileInputStream(new File("TestFileInputStream.java"));
  }catch(FileNotFoundException e){
   System.out.println("文件找不到,请检查文件名是否正确");
   System.exit(-1);
  }
  try{
    while((b=fis.read())!=-1){
     System.out.print((char)b);
     num++;
    }
    fis.close();
    System.out.println("共读取了:"+num+"次数据");
  }catch(IOException e){
   e.printStackTrace();
  }
 }
}
//字节流实例2
import java.io.*;
public class TestFileOutputStream{
 public static void main(String[] args){
  FileInputStream in=null;
  FileOutputStream out=null;
  int b=0;
  try{
   in=new FileInputStream(new File("TestFileInputStream.java"));
   out=new FileOutputStream(new File("newfile.txt"));
   while((b=in.read())!=-1){
    out.write(b);
   }
  }catch(FileNotFoundException e1){
    System.out.println("文件没有找到");
    System.exit(-1);
  }catch(IOException e){
    System.out.println("文件复制失败");
  }
  System.out.println("文件复制完成");
 }
}

四、数据流实例

//数据流,字节数组流的实用实例
import java.io.*;
public class TestDataInputStream{
 public static void main(String[] args){
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  DataOutputStream dos = new DataOutputStream(baos);
  try{
   dos.writeDouble(Math.random());//dis.wirte();
   dos.writeBoolean(true);
   //baos.toByteArray() 返回一个数组;Creates a newly allocated byte array.
   ByteArrayInputStream bais= new ByteArrayInputStream(baos.toByteArray());
   DataInputStream dis =new DataInputStream(bais);
   //这个语句位置在这里输出9
   System.out.println(bais.available());
   System.out.println(dis.readDouble());
   System.out.println(dis.readBoolean());
// 同样的语句放到这里却输出为0,这说明方法avaliable的作用是返回可读的字节数,其英文解释如下:
//Returns the number of remaining bytes that can be read (or skipped over) from this input stream.
   System.out.println(bais.available()); 
   dos.close();
   dis.close();
  }catch(IOException e){
   e.printStackTrace();
  }
 }
}
    //输出结果为 9 随机数 true 0
        
五、打印流实例    
          注意事项:
PrintWriter与PrintStream都属于输出流分别针对字符流与字节流
PrintWriter与PrintStream都提供了重载的print println方法用于多种数据类型的输出
PrintWriter与PrintSteam的输出操作都不会抛出异常,用户通过检测错误状态获取错误信息
PrintWriter和PrintStream有自动flush功能


/ /PrintStream 实例1
import java.io.*;
public class TestPrintIO{
 public static void main(String[] args){
  PrintStream ps=null;
  try{
   FileOutputStream fos=new FileOutputStream("log.dat");
   ps=new PrintStream(fos);
   System.setOut(ps);
   for(int i=0;i<60000;i++){
    System.out.print((char)i);
   }
  }catch(IOException e){
    e.printStackTrace();
  }
 }
}
/ /PrintStream 实例2
import java.io.*;
public class TestPrintIO{
 public static void main(String[] args){
  PrintStream ps=null;
  try{
   FileOutputStream fos=new FileOutputStream("log.dat");
   ps=new PrintStream(fos);
 
  }catch(IOException e){
    e.printStackTrace();
  }
  if(ps!=null){
   System.setOut(ps);
  }
  int ln=0;
  for(int i=0;i<60000;i++){
   //System.out.print(i+"");
   if(ln++=100){
    System.out.println(i+"");
    ln=0;
   }
  }     
 }
}
        // 实例2增加了ps非空判断的作用是什么?为什么要这么做呢,新增ln成员变量用以控制For循环内部输出符合条件的i的值



/ /PrintStream 实例2
import java.io.*;
public class TestPrintStream2{
 public static void main(String[] args){
  PrintStream ps=null;
  try{
   FileOutputStream fos=new FileOutputStream("log.dat");
   ps=new PrintStream(fos);
  }catch(IOException e){
    e.printStackTrace();
  }
  if(ps!=null){
   System.setOut(ps);
  }
  int ln=0;
//i可以定义为其他类型,可以直接为char类型,可是char类型做预算时,会自动转成int类型
  for(char i=0;i<60000;i++){ 
   //System.out.print(i+"");
   if(ln++ == 10000){
    System.out.println((char)i);
    ln=0;
   }
  }
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值