最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料
在操作上,字节流本身不会用到缓存区,是文件本身直接操作的,而字符流使用了缓存区,通过缓存区再操作文件。
例:
- 使用字节流不关闭执行
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
@SuppressWarnings(“resource”)
public static void main(String[] args) throws IOException {
//第1步:使用File类找到一个文件
File f = new File(“d:” + File.separator + “a.txt”);
// 第2步:通过子类实例化父类对象
OutputStream out = null;
// 准备好一个输出的对象
out = new FileOutputStream(f);
// 通过对象多态性进行实例化
// 第3步:进行写操作
String str = “Hello World!!!”;
// 准备一个字符串
byte b[] = str.getBytes();
// 字符串转byte数组
out.write(b);
// 将内容输出
// 第4步:关闭输出流
// out.close();
// 此时没有关闭
}
}
运行结果:
分析:此时没有关闭字节流输出操作,而文件中有输出内容,证明字节流是直接操作文件本身。
- 使用字符流不关闭
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class WriterDemo {
@SuppressWarnings(“resource”)
public static void main(String[] args) throws IOException {
//第1步:使用File类找到一个文件
File f = new File(“d:” + File.separator + “a.txt”);
// 第2步:通过子类实例化父类对象
OutputStream out = null;
// 准备好一个输出的对象
out = new FileOutputStream(f);
// 通过对象多态性进行实例化
// 第3步:进行写操作
String str = “Hello World!!!”;
// 准备一个字符串
byte b[] = str.getBytes();
// 字符串转byte数组
out.write(b);
// 将内容输出
// 第4步:关闭输出流
// out.close();
// 此时没有关闭
}
}
结果:
- 关闭输出流并强制清空缓存区后
// 强制性清空缓冲区中的内容
out.flush();
// 将内容输出
// 第4步:关闭输出流
out.close();
结果:
分析:程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
字节流与字符流主要的区别是他们的的处理方式:
- 字节流主要用在处理二进制数据,它是按字节来处理的。
- 字符流是按虚拟机的Encode来处理,也就是要进行字符集的转化。
- 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。
- 从字节流转化为字符流时,实际上就是byte[]转化为String,反之String转化为byte[]
4、java输入/输出流体系中常用的流的分类表
注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。
5、用法
- 使用FileInputStream类读取文件内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
- 数据输入流测试
*/
public class firstIO {
public static void main(String [] args) throws IOException{
int i=0;
FileInputStream in=null;
try {
in=new FileInputStream(“D:\a.txt”);//从文件外读数据
} catch (FileNotFoundException e) {
// TODO: handle exception
System.out.println(“找不到文件位置”);
System.exit(-1);
}
try {
int num=0;//用于字节个数的计数
while((i=in.read())!=-1){
System.out.println((char)i);//将得到的ASCII码值转换成字符型
num++;
}
in.close();
System.out.println(“传输字节个数:”+num);
} catch (Exception e) {
// TODO: handle exception
System.out.println(“读取文件错误”);
}
}
}
- 使用FileOutputStream写入文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
- 输入输出流测试
*/
public class outIO {
public static void main(String []args){
int i=0;
FileInputStream in=null;
FileOutputStream out=null;
try {
//实例化FileInputStream,FileOutputStream对象
in=new FileInputStream(“D:\a.txt”);
out=new FileOutputStream(“D:\b.txt”);
while((i=in.read())!=-1){
out.write(i);
System.out.println((char)i);
}
in.close();
out.close();
System.out.println(“文件已复制”);
} catch (Exception e) {
// TODO: handle exception
System.out.println(“文件复制错误”);
System.exit(-1);
}
}
}
最后的话
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:
[外链图片转存中…(img-sIA45Puy-1715263658321)]