io字节流的基本的读取和写入

字节流的基本的读取
基本的操作与字符流类相同
但它不仅可以操作字符,还可以操作其他媒体文件(基本电脑上的所有的数据,字节流都可以操作)。
例子:
    Copy一个jpg文件。


字符流的缓冲区用的是字符的数组,而字节流的缓冲区,用的是字节数组。


如:例子


package com.fjx.output.and.input;


import java.io.FileInputStream;
import java.io.FileOutputStream;


public class OutputStreamTest {


public static void main(String[] args) throws Exception {


// writer_demo();//调用写的方法,将数据写到硬盘上。
// reader_demo();// 调用读的方法,将数据读到内存中。
//arrayReader();// 采用自定义的长度的缓冲区将硬盘中的数据读到内存中
available();//可以获取文件的大小的方法。
}


public static void writer_demo() throws Exception {
// 创建字节的输出流的对象,用来操作文件数据。
FileOutputStream out = new FileOutputStream("out.txt");// 没有使用就包警告
// 写入文件,写入到目的地中。
out.write("3123".getBytes());
// 关闭流,释放底层资源。
out.close();
}


public static void reader_demo() throws Exception {
// 创建字节的输入流对象,用来将硬盘的数据读入到内存中。
FileInputStream in = new FileInputStream("out.txt");
// 读入数据,读到内存中,
int b = 0;
while ((b = in.read()) != -1) {
System.out.println(new String("" + (char) b));
}
// 关闭流,释放资源。
in.close();
}


public static void arrayReader() throws Exception {
// 创建字节的输入流对象,用来将硬盘的数据读入到内存中。
FileInputStream in = new FileInputStream("out.txt");
// 读入数据,读到内存中,
byte[] buf = new byte[5];
int len = 0;
while ((len = in.read(buf)) != -1) {
/**
* in.read(buf) 将读到的字节保存到字节的数组中buf, 它的返回值是读到的字节的数。
* 每一次读1024个字节到buf字节数组中 如果文件的字节数小于1024个字节,则len的大小也小于1024个字节,
* 它等于实际上读到的字节的数。 如:我现在有一个文件的大小是1029字节,则while循环了两次
* 第一次len=1024,而第二次的len=5。这样new String(buf,0,len);
* 就可以将buf中有效的长度的字节数组转化成字符串。

*/
System.out.println(new String(buf, 0, len));
}
// 关闭流,释放资源。
in.close();
}


public static void available() throws Exception {
/*
* 字节输入流的avallable()方法的定义与使用
*/
FileInputStream in = new FileInputStream("out.txt");
System.out.println(in.available());
/*
* in.available()该方法可以获取文件的大小,
* 但是缓冲区的数组中byte[] buf=new byte[in.available()];//刚刚好的字符的缓冲区。
* 不会这样使用,因为一个文件如果很大的话,如大于4G,那么你的内存有那么大吗?会导致内存的
* 溢出。
* 但后期它还是有用的。
*/
byte[] buf=new byte[in.available()];//这样弄容易导致内存溢出,
/*
* 该方法的使用的场景,可以先读取出文件的大小,然后就可以根据他的
* 大小分段读取数据。
* 如:一个文件的大小100,它可以先读50,再读50。
* 还有如果一个文件很小,而且不会超过你的内存也可以这样用,但不建议。
* 建议使用缓冲区或自定义长度的缓冲区数组(byte[] buf=new byte[1024])
*/
in.read(buf);
System.out.println(new String(buf));
in.close();


}


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值