java面试——流
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
1.流的创建(Stream)
这里的流是在:
import java.util.stream.Stream;
可详看https://www.cnblogs.com/andywithu/p/7404101.html
使用Collection接口中的stream方法将任意集合装换为一个流。
public class mian { public static void main(String[] args) throws IOException { String contents=new String(Files.readAllBytes(Paths.get("D:\\eqe.txt")), StandardCharsets.UTF_8); List<String> list=Arrays.asList(contents.split("\\PL+"));//正则表达式按非字母分割 //普通的循环计算 int count=0; for (String w: list) { if (w.length()>0){ count++; } } //使用顺序流计算 long count1=list.stream().filter(w->w.length()>0).count(); //使用并行流计算 long count2=list.parallelStream().filter(w->w.length()>0).count(); System.out.println(count+" "+count1+" "+count2);//16 16 16 } }
产生一个元素为给定值的流
1 | static <T> Stream<T> of(T... values) |
2、IO流
这里是我们经常说的io流,在
import java.io
IO流的分类
- 根据处理数据类型的不同分为:字符流和字节流
- 根据数据流向不同分为:输入流和输出流
字符流和字节流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别:
(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
(3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件,我们将在下面验证这一点。
结论:优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。
输入/输出流
输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中;输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备。
InputStream类
常用方法:
abstract int read();//从数据中读入一个字节并返回该字节,碰到输入流末尾时返回-1 int read(byte[] b);//读入一个字节数组,返回实际读入的字节数,碰到输入流末尾时返回-1,最多读入b.length个字节 int read(byte[] b,int off,int len);//读入一个字节数组,返回实际读入的字节数,碰到输入流末尾时返回-1 /** * b 数据读入的数组 * off 第一个读入数组字节应该被放置的位置在b中的偏移量 * len 读入字节的最大数量 */ long skip(long n);//在输入流中跳过n个字节,返回实际跳过的字节数 int available();//返回在不阻塞的情况下可获得的字节数
OutputStream类
常用方法:
abstract void write(int n);//写出一个字节的数据 void write(byte[] b); void write(byte[] b,int off,int len); /** * 写出所有字节或者某个范围内的字节到数组b中 * b 数据写出的数组 * off 第一个写出字节在b中的偏移量 * len 写出字节的最大数量 */ void close(); void flush();//冲刷输出流,也就是将所有缓冲的数据发送到目的地
看不下去了!!!!!平常用不到,学起来咋这么困难的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~