学习Java第20天笔记

day20文字笔记
正课内容:
1、IO输入与输出
java按照输入与输出方向划分两个操作:读和写
输入是用来读取的,是从外界输入到程序中的方向,输出是用来写的

java将输入与输出比喻为“流stream”,即:向同一侧顺序移动的过程
并且定义了两个超类:java.io.InputStream:输入流
里面规定了所有字节输入流的读取方法。将来实际读取不同设备的输入流都继承自它,因此都会有
这里定义的读取操作,使得程序员可以用相同的读取方式读取不同的设备。
java.io.OutputStream:输出流,所有字节的输出流都继承自它,里面定义了写出字节的方法

文件流:java.io.FileInputStream和FileOutStream
它们都继承自InputStream和OutStream.用来连接文件,进行读写文件数据的流

1)输出流的两种构造方法
public static void main(String[] args) throws IOException {
/** 文件输出流提供了两种构造方法:
需要注释,如果指定的文件不存在会自动将其创建出来,前提是该文件所在的目录必须存在!

     向当前的目录下的fos.dat文件中写入数据
     File file = new file("./fos.dat");
     FileOutputStream fos = new FileOutStream(file);
      */
    FileOutputStream fos = new FileOutputStream("./fos.dat");
    /*
    void write(int d)
    写入一个字节,将给定的int的值对应为二进制的“低八位”写入文件
    00000000  00000000  00000000  00000001
     */
    fos.write(1);
    fos.write(256);
    System.out.println("写出完毕!");
    fos.close();
}

2)文件输入流的构造方法
/** 文件输入流 */
public class FISDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(“fos.dat”);
int d = fis.read();
System.out.println(d);
d = fis.read();
System.out.println(d);
d = fis.read();
System.out.println(d);
System.out.println(“读取完毕!”);
fis.close();
3)文件复制
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(“法拉第.jpg”);
FileOutputStream fos = new FileOutputStream(“法拉第_cp.jpg”);
int d ;
long start = System.currentTimeMillis();
while ((d = fis.read())!=-1){
fos.write(d);
}
long end = System.currentTimeMillis();
System.out.println(“复制完毕!已耗时:”+(end-start)+“ms”);
fis.close();
fos.close();

}

4)块读写方式
提高每次读写的数据量,减少读写的次数,可以提高读写效率
单字节读写是一种随机读写的形式
一组字节的读写是块读写形式
对于机械硬盘和很多其他硬件而言,块读写的效率很好,但是随机读写的性能差

/
public class CopyDemo2 {
public static void main(String[] args) throws IOException {
/
* */
FileInputStream fis = new FileInputStream(“演示文稿1.pptx”);
FileOutputStream fos = new FileOutputStream(“演示文稿1_cp.pptx”);

    byte[] data = new byte[1024*10];
    int len;
    long start = System.currentTimeMillis();

    while((len = fis.read(data))!=-1){
        fos.write(data,0,len);

    }
    long end = System.currentTimeMillis();
    System.out.println("复制结束!耗时:"+(end-start)+"ms");
    fis.close();
    fos.close();
}

4)向文件写入文本数据

public static void main(String[] args) throws IOException {
//向文件中写入字符串
/** 文件流有两种模式:FileOutputStream(String path)
FileOutputStream(File file)
以上两种方式创建流时,若指定的文件存在则会将该文件原数据全部清除

     FileOutputStream(String path,boolean append)
     FileOutputStream(File file,boolean append)
     如果创建时指定第二个参数且为true时,文件输出流为追加模式,即:若指定的文件存在,则数据保留
     新写入的数据都会继续向文件中追加
      */
    //FileOutputStream fos = new FileOutputStream("fos.txt");
    FileOutputStream fos = new FileOutputStream("fos.txt",true);
    //String line = "吃个桃桃好凉凉";
    String line = "呵呵哒";
    //将字符串按照UTF-8编码转换为一组字节
    byte[] data = line.getBytes(StandardCharsets.UTF_8);
    fos.write(data);
    System.out.println("写出完毕!");
    fos.close();
}

5)节点流和处理流
Java将流分为两类:
节点流和处理流
节点流也称为低级流,是真实连接程序与另一端的管道,读写一定是建立在节点流的基础上进行的,
比如文件流其实就是节点流

处理流也称为高级流,是不能独立存在的,必须连接在其他流上,目的是当数据流经它时对数据进行某些加工
处理,简化我们的同等操作

实际开发中我们经常会串联一组高级流并最终连接到低级流上,使得读写数据以流水线加工处理来完成。这个操作称为
”流的连接“
5.1)缓冲流
java.io.BufferedInputStream和BufferedOutputStream
缓冲流是一对高级流,作用是加快读写效率
案例:
public static void main(String[] args) throws IOException {
    		FileInputStream fis = new FileInputStream("视频.mp4");
   		BufferedInputStream bis = new BufferedInputStream(fis);
    		FileOutputStream fos = new FileOutputStream("视频_cp.mp4");
    		BufferedOutputStream bos = new BufferedOutputStream(fos);
    		int d;
    		long start = System.currentTimeMillis();
    		while ((d = fis.read())!=-1){
        			fos.write(d);
    		}
    		long end = System.currentTimeMillis();
    		System.out.println("复制完毕!耗时:"+(end-start)+"ms");
    		bis.close();
   		bos.close();

	}
5.2)字节缓冲流
public static void main(String[] args) throws IOException {
    		FileOutputStream fos = new FileOutputStream("bos.txt");
    		BufferedOutputStream bos = new BufferedOutputStream(fos);
    		String line = "让我再看你一遍,从南到北";
    		byte[] data = line.getBytes(StandardCharsets.UTF_8);
    		bos.write(data);
    		bos.flush();
    		System.out.println("写出完毕!");
    		bos.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值