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();
}
}

浙公网安备 33010602011771号