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();//冲刷输出流,也就是将所有缓冲的数据发送到目的地
复制代码

看不下去了!!!!!平常用不到,学起来咋这么困难的

 

posted on   xy-pei  阅读(67)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示