小白Java学习笔记d13(缓冲字节流,转换流,对象流)

缓冲流 基于内存的
在这里插入图片描述
缓冲字节流

  • 缓冲字节输入流
public static void testBufferedInputStream() throws Exception {
 //文件字节流输入对象
 FileInputStream in=new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt.txt");
 //把文件字节输入流 放入 缓冲流输入
 BufferedInputStream br=new BufferedInputStream(in);
 byte [] b=new byte[10];
 int len =0;
 while((len=br.read(b))!=-1) {
  System.out.println(new String(b,0,len));
  
 }
 //关闭流顺序 最晚开的最早开
 br.close();
 in.close();
}

字节输出流

ublic static void testBufferedOutputStream() throws Exception {
 //创建字节输出流对象
 FileOutputStream out=new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt1.txt");
 //把字节输出流对象放到缓冲字节输出流
 BufferedOutputStream bo=new BufferedOutputStream(out);
 String s="杨金晓";
 bo.write(s.getBytes());//写到内存里
 bo.flush();//刷到硬盘上
 bo.close();
 out.close();
   
 
}

复制

public static void copyFile() {
 
  try {
   BufferedInputStream br=new BufferedInputStream(new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt1.txt")); //读取的源文件
   BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt2.txt")); //要复制的目标地址
   byte[] b=new byte[100];
   int len=0;
   while((len=br.read(b) )  !=-1) {
    bo.write(b,0,len);//
   }
   bo.flush();
   bo.close();
   br.close();
  } catch (Exception e) {
  
   e.printStackTrace();
  }
 }

转换流把字节流转换为字符流
当字节流中的数据都是字符的时候,使用转换流转为字符流处理效率更高
//所有的文件都是由编码格式
//对我们来说,TxT和java文件一般来说有三种编码
//ISO8859-1西欧编码,纯粹的英文编码,不适用汉字
//GBK 和UTF-8,这两编码是适用于中文和英文
//我们一般使用UTF-8编码

/**

  • 转换输入流
  • 注意,在转换字符流时,设置的字符集编码要与读取的文件数据编码一致
  • 不然出现乱码
  • InputStreamReader
  • @throws Exception
    */
public static void testInputStreamReader() throws Exception {
   FileInputStream fs=new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt5.txt");
   //把子节流转换为字符流
 InputStreamReader in=new InputStreamReader(fs,"GBK");//fs字节流 GBK编码
  // InputStreamReader in=new InputStreamReader(fs,"UTF-8");//fs字节流 UTF-8编码
   char[] c=new char[100];
   int len=0;
   while((len=in.read(c)) !=-1) {
    System.out.println(new String(c,0,len));
    
   }
   in.close();
   fs.close();
  }
}

标准输入流小练习
把控制台输入的内容写到指定的TXT文件中,当接收到字符串over时就结束程序的运行

public static void write2TXT() throws Exception {
 //创建一个接受键盘输入数据的输入流
  InputStreamReader is=new InputStreamReader (System.in);
  //把输入流放进缓冲流
  BufferedReader br=new BufferedReader(is); 
  BufferedWriter out=new BufferedWriter(new FileWriter("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt7.txt")); 
  String line="";//定义一个临时接受数据的字符串
  while((line=br.readLine())!=null) {
   if(line.equals("over")) {
    break;
   }
   //读取的内容写到指定的TXT文件tt7.txt中
   out.write(line);
  }
  out.flush();
  out.close();
  br.close();
  is.close();
}

没做出来

对象流

在这里插入图片描述
*/

  • 可以序列化与反序列化的对象
  • @author Daybreak

*/

import java.io.Serializable;

public class Person implements Serializable {
/**
  * 一个表示序列化版本标识符的静态变量
  * 用来表明类的不同版本的兼容性
  */
 private static final long serialVersionUID = 1L;
  String name;
  int age;
}
public class Test5 {
public static void main(String[] args) {
 try {
  Test5.testSerialize();
 } catch (Exception e) {
  
  e.printStackTrace();
 }
 对象序列化
 public static void testSerialize() throws Exception {
 //定义对象的输出流,把对象的序列化之后的流 放入指定文件夹中
 ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt9.txt"));
 
 Person p=new Person();
 p.name ="zz";
 p.age=12;
 out.writeObject(p);
 out.flush();
 out.close();
}
}

RandomAccessFile类
随机访问 ,程序可以直接跳到文件对的任意地方来读 写文件
/**

  • 文件的随机读写
  • 程序可以直接跳到文件的任意地方来读 写文件
  • @author Daybreak

*/

随机读文件
public static void testRandomAccessFileRead() throws Exception {
   RandomAccessFile ra=new RandomAccessFile("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt.txt","rw");//两个参数,路径,访问模式(r制度,rw读取 写入)
  ra.seek(0);//设置读取文件起始点
  byte [] b=new byte[1024];
  int len=0;
  while((len=ra.read(b)) !=-1) {
   System.out.println(new String(b,0,len));
  }
  ra.close();
  }

总结
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值