day23作业-韩明琰
IO流作业
一、 填空题
- Java IO流按操作类型分为 输入流 和 _输出流__________ 。
- 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数据, read 方法给程序提供了一个从输入流中读取数据的基本方法。
- read方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0-255之间的一个整数),如果到达源的末尾,该方法返回 -1 。
- Java系统的标准输入对象是System.in,标准输出对象有两个,分别是标准错误输出System.err和标准输出 _______System.out_______。
- Java IO体系中,______FileInputSteam________是字节输入流,不仅提供了存取所有Java基础类型数据(如:int,double 等)和String的方法,也提供了提供存取对象的方法。
- Java IO体系中,____FileOutputStream____是字节输出流,提供了可以存取所有Java基础类型数据(如:int,double 等)和String的方法,但没有提供存取对象的方法。
二、 简答题
- 输入流和输出流的联系和区别,字符流和字节流的联系和区别
两者都是对数据进行传输的,输入流是将数据读取到内存,输出流是将数据从内存写到硬盘;
两者都是将数据转换成对应类型进行传输,字符流只能传输文本文档,字节流都可以,但是字节流传输中文时可能造成乱码;
2.列举常用的字节输入流和字节输出流并说明其特点,至少5对。
ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream,
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, OutputStream, ObjectOutputStream, PipedOutputStream
3.说明缓冲流的优点和原理
缓冲流可以一次性读取大量数据,减少数据传输次数 增加传输速度
原理:缓冲流将读取到的数据存入自身的缓冲区内存 ,内存满后再传入到文件.
三、 编码题
- 实现字符串和字节数组之间的相互转换。必如将字符串“北京最课程bjzkc”转换为字节数组,并将字节数组再转换回字符串。
package com.zuikc.homeWork; public class Test1 { public static void main(String[] args) throws Exception { // 1. 实现字符串和字节数组之间的相互转换。必如将字符串“北京最课程bjzkc”转换为字节数组,并将字节数组再转换回字符串。 String str = "北京最课程bjzkc"; byte[] by = str.getBytes(); for (byte b : by) { System.out.println(b); } String s = new String(by); System.out.println(s); } }
2.分别使用文件流和缓冲流复制一个长度大于100MB的视频文件,并观察效率的差异。
package com.zuikc.iosteam; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Demo { public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream("谢谢你.mp4"); FileOutputStream fos = new FileOutputStream("谢谢你copy.mp4"); byte[] arr = new byte[1024*8]; int len; while((len = fis.read(arr)) != -1) { fos.write(arr, 0, len); } fis.close(); fos.close(); FileInputStream fis = new FileInputStream("谢谢你.mp4"); FileOutputStream fos = new FileOutputStream("谢谢你copy.mp4"); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); int b; while((b = bis.read()) != -1){ bos.write(b); } bis.close(); bos.close(); } }