【206天】黑马程序员27天视频学习笔记【Day20-下】
叨逼叨两句
- 在人人都会编程的时代,老程序员的价值在哪里?编的更熟练吗?NONONO,必须和新人从不同维度竞争。
- 跟包容性强的人聊天感觉就是好
- 清醒的努力+选择,在3-5年成为业界80分水准的程序员
- 清醒的努力+选择,在一个方向专研,用10年时间成为99分的技术专家兼程序员。
- 清醒的努力+选择,用10年时间成为一个懂金融、懂营销、会写作、会演讲同时又“恰好会编程“的人。
- 大胆列计划【JavaEE、JavaWeb入行,往大数据方向转】、JavaScript【业余学习,应对物联网】、Python【业余学习,应对人工智能,并研究研究量化金融】的专家。
20-11:BufferedInputStream和BufferedOutputStream拷贝
缓冲思想
- 字节流一次读写一个数组的速度明显比一次读一个字节快很多
BufferedInputStream
- BufferedInputStream内置一个缓冲区(数组)
- Java程序读取硬盘上的文件数据时,不会直接从文件将字节往内存中的Java程序输送,而是使用BufferedInputStream作为缓冲区,先将文件中字节一次性装满BufferedInputStream的8192个字节数组,然后再由Java程序一个个读取缓冲区的数据
BufferedOutputStream
- BufferedOutputStream内置一个缓冲区(数组)
- Java向硬盘中写出文件数据时,不会直接从Java程序将数据往硬盘上写,而是使用BufferedOutputStream作为缓冲区,先由Java程序一个个将BufferedOutputStream的8192个字节装满,然后再将这些字节一次性写入硬盘上的文件
- 原理图如下:

package com.test.demo001;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo009 {
public static void main(String[] args) throws IOException{
//demo01();
FileInputStream fis = new FileInputStream("20.avi");
FileOutputStream fos = new FileOutputStream("copy.avi");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int b;
while((b = bis.read())!= -1){
bos.write(b);
}
bis.close();
bos.close();
}
private static void demo01() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("cccccc.txt");
FileOutputStream fos = new FileOutputStream("bbbbbb.txt");
byte[] arr = new byte[2];
int len; //读到的有效字符个数
while((len = fis.read(arr))!= -1){
fos.write(arr,0,len);
}
fis.close();
fos.close();
}
}20-12:flush和close方法的区别
- flush()方法可用来刷新缓冲区,刷新后再次写出
- close()方法用来关闭流释放资源,如果是带缓冲区的流对象的close方法,关闭流之前会对缓冲区进行刷新,关闭后也不能再写出。
- 为什么要刷新?因为不刷新数据会留在缓冲区一部分【小于8192字节的那部分】,导致拷贝的文件不完整。
public class Demo009 {
public static void main(String[] args) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("20.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.avi"));
int b;
while((b = bis.read())!= -1){
bos.write(b);
}
bis.close();
bos.close();
}20-13:字节流读写中文
字节流读中文的问题:可能出现读到半个中文乱码的情况
package com.test.demo001; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("b.txt"); byte[] arr = new byte[2]; int len; while((len = fis.read(arr))!= -1){ System.out.println(new String(arr,0,len)); } } }
字节流写出中文的问题:
- 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
- 写出回车换行write(“rn”.getBytes());
package com.test.demo001; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileOutputStream fos = new FileOutputStream("b.txt"); fos.write("你好世界".getBytes()); fos.write("\r\n".getBytes()); fos.write("你好世界".getBytes()); } }
20-14:流的标准处理异常代码1.6版本及其以前
package com.test.demo001;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo009 {
public static void main(String[] args) throws IOException{
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("b.txt");
fos = new FileOutputStream("c.txt");
int b;
while((b = fis.read())!= -1){
fos.write(b);
}
} finally {
try {
if(fis != null){
fis.close();
}
} finally {
fos.close();
}
}
}
}20-15:流的标准处理异常代码1.7版本
- ()中的对象必须实现AutoCloseable接口
package com.test.demo001;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo009 {
public static void main(String[] args) throws IOException{
try(
FileInputStream fis = new FileInputStream("b.txt");
FileOutputStream fos = new FileOutputStream("c.txt");
){
int b;
while((b = fis.read())!= -1){
fos.write(b);
}
}
}
}
class MyClose implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("我自动关闭了");
}
}20-16:图片加密
- 将写出的字节异或一个数,这个数就是密钥,解密的时候再次异或就可以了。
package com.test.demo001;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo009 {
public static void main(String[] args) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("dd.jpeg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ee.jpeg"));
int len;
while((len = bis.read())!= -1){
bos.write(len ^ 123);
}
bis.close();
bos.close();
}
}20-17:在控制台录入文件的路径,将文件拷贝到当前项目下
package com.test.demo001;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Demo009 {
public static void main(String[] args) throws IOException{
File file = getFile();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
int len;
while((len = bis.read())!= -1){
bos.write(len);
}
bis.close();
bos.close();
}
public static File getFile(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件路径");
while(true){
String line = sc.nextLine();
File file = new File(line);
if(!file.exists()){
System.out.println("录入的路径文件不存在");
} else if(file.isDirectory()) {
System.out.println("录入的路径是文件夹,请重新输入");
} else {
return file;
}
}
}
}20-18:录入数据,拷贝到文件
package com.test.demo001;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Demo009 {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
FileOutputStream fos = new FileOutputStream("text.txt");
System.out.println("请输入数据:");
while(true){
String line = sc.nextLine();
if("quit".equals(line)){
break;
}
fos.write(line.getBytes());
fos.write("\r\n".getBytes());
}
}
} 相关推荐
kukelook 2020-04-22
程序员官方BLOG 2015-07-10
Java填坑之路 2019-09-08
ioriguojun 2013-01-25
madmanG 2016-03-13
ellende 2019-06-25
韩世雷程序员 2019-06-25
Java填坑之路 2019-06-25
ellende 2019-06-21
taoxiuyi0 2019-06-21
taoxiuyi0 2019-06-21
叨逼叨两句收拾收拾~18-11:Collection中的常见方法sortpackage com.test.demo001;System.out.println; //根据默认排序结果获取集合中的最大值
javaMerea 2019-06-21
javaMerea 2019-06-21
韩世雷程序员 2019-06-21
taoxiuyi0 2019-06-21
ellende 2019-06-21
韩世雷程序员 2019-06-21
韩世雷程序员 2019-06-21
ellende 2019-06-21