深入理解 Java中的 流 (Stream)

QDMA工程搭建/windows驱动编译与性能测试 请注意,根据您的目标操作系统,您可能需要在windows启动配置中启用测试签名的驱动程序,以便启用此驱动程序的安装。右键单击设备,选择更新驱动程序软件,然后选择构建的QDMA驱动程序的文件夹(通常为。创建一个新工程,在IP Catalog中搜索QDMA,双击创建qdma ip核。驱动程序安装安装驱动程序最简单的方法是通过Windows的“设备管理器”。如果系统提示未经验证的驱动程序发布者,请选择无论如何安装此驱动程序软件。本节主要介绍QDMA驱动在Windows系统的源文件、编译和安装过程。 阅读详情

转自:http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html


随笔-80  评论-172  文章-0  trackbacks-0

深入理解 Java中的 流 (Stream)

个人小站,正在持续整理中,欢迎访问:http://shitouer.cn

小站博文地址:深入理解 Java中的 流(Stream)机制

最近在看《Hadoop:The Definitive Guide》,对其分布式文件系统HDFS的Streaming data access不能理解。基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手。流机制也是JAVA及C++中的一个重要的机制,通过流使我们能够自由地操作包括文件,内存,IO设备等等中的数据。

首先,流是什么?

流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。

流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。

可以将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念。

当程序需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个输出流,这个数据源目的地也可以是文件、内存或网络等等。

流有哪些分类?

可以从不同的角度对流进行分类:

1. 处理的数据单位不同,可分为:字符流,字节流

2.数据流方向不同,可分为:输入流,输出流

3.功能不同,可分为:节点流,处理流

1. 和 2. 都比较好理解,对于根据功能分类的,可以这么理解:

节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如FileInputStream和FileOutputStream,他们直接从文件中读取或往文件中写入字节流。

处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。例如BufferedInputStream和BufferedOutputStream,使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率,以及DataInputStream和DataOutputStream,使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。他们都属于过滤流。

举个简单的例子:

复制代码
public static void main(String[] args) throws IOException {
        // 节点流FileOutputStream直接以A.txt作为数据源操作
        FileOutputStream fileOutputStream = new FileOutputStream("A.txt");
        // 过滤流BufferedOutputStream进一步装饰节点流,提供缓冲写
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                fileOutputStream);
        // 过滤流DataOutputStream进一步装饰过滤流,使其提供基本数据类型的写
        DataOutputStream out = new DataOutputStream(bufferedOutputStream);
        out.writeInt(3);
        out.writeBoolean(true);
        out.flush();
        out.close();
        // 此处输入节点流,过滤流正好跟上边输出对应,读者可举一反三
        DataInputStream in = new DataInputStream(new BufferedInputStream(
                new FileInputStream("A.txt")));
        System.out.println(in.readInt());
        System.out.println(in.readBoolean());
        in.close();
}
复制代码

流结构介绍:

Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型。

  字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

1.继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte=8bit),如图,深色的为节点流,浅色的为处理流。

 

2.继承自Reader/Writer的流都是用于向程序中输入/输出数据,且数据的单位都是字符(2byte=16bit),如图,深色的为节点流,浅色的为处理流。

常见流类介绍:

节点流类型常见的有:

对文件操作的字符流有FileReader/FileWriter,字节流有FileInputStream/FileOutputStream。

处理流类型常见的有:

缓冲流:缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写效率,同事增加了一些新的方法。

  字节缓冲流有BufferedInputStream/BufferedOutputStream,字符缓冲流有BufferedReader/BufferedWriter,字符缓冲流分别提供了读取和写入一行的方法ReadLine和NewLine方法。

  对于输出地缓冲流,写出的数据,会先写入到内存中,再使用flush方法将内存中的数据刷到硬盘。所以,在使用字符缓冲流的时候,一定要先flush,然后再close,避免数据丢失。

转换流:用于字节数据到字符数据之间的转换。

  仅有字符流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要与InputStream“套接”,OutputStreamWriter需要与OutputStream“套接”。

数据流:提供了读写Java中的基本数据类型的功能。

  DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream类型的节点流之上。

对象流:用于直接将对象写入写出。

  流类有ObjectInputStream和ObjectOutputStream,本身这两个方法没什么,但是其要写出的对象有要求,该对象必须实现Serializable接口,来声明其是可以序列化的。否则,不能用对象流读写。

  还有一个关键字比较重要,transient,由于修饰实现了Serializable接口的类内的属性,被该修饰符修饰的属性,在以对象流的方式输出的时候,该字段会被忽略。


CTFshow-pwn入门-前置基础pwn32-pwn34 阅读详情

相关推荐

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 482

Stream流详解

stream流操作是Java 8提供一个重要新特性,它允许开发人员以声明性方式处理集合,其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中,能 让代码更加简洁,极大地简化了集合的处理操作,提高了开发的效率和生产力。同时stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。............

ss810540895的博客 3万+

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1668

Stream流

Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

liudachu的博客 2955

Vivado安装教程:多版本共存的配置技巧

详解Vivado安装教程中的多版本共存配置技巧,帮助用户在同一系统中管理不同版本的Vivado开发环境,提升开发效率与兼容性,适用于需要切换版本的FPGA开发者。

weixin_35257663的博客 1776

合宙ESP32C3实战:MPU6500六轴传感器数据读取与校准全解析

本文详细解析了如何使用合宙ESP32C3开发板读取和校准MPU6500六轴姿态传感器数据。从硬件接线、开发环境搭建到核心代码解析,提供了全面的实战指南,帮助开发者快速掌握传感器配置与数据处理技巧,适用于姿态控制、运动检测等应用场景。

weixin_27066963的博客 406

Java--Stream流详解

Stream是Java 8 API添加的一个新的抽象,称为流Stream,可以一种声明的方式处理数据 stream().filter()一般适用于list集合过滤list中的数据,主要作用就是模拟sql查询,从集合中查询想要的数据,不用像之前一样遍历list再筛选 orElse(null)表示如果一个都没找到返回null(orElse()中可以塞默认值。如果找不到就会返回orElse中设置的默认值) orElseGet(null)表示如果一个都没找到返回null(orElseGet()中可以塞默认值。

MinggeQingchun的博客 9万+

STM32F4使用CUBEMX ADC定时采样+DMA

STM32、FFT、ADC、TIM

m0_62379750的博客 4222

stream流

Stream是一种流,是一种抽象的处理数据的思想,这种编程方式将要处理的元素集合看作一种流,流在管道中传输,然后在管道的每一个节点上对流进行操作(去重,分组,过滤…),元素流在经过管道的操作后,最后由最终操作得到新的一个元素集合。

weixin_43739348的博客 606

Xilinx VU+系列多DIE FPGA时序约束与跨DIE信号优化策略

本文深入探讨了Xilinx VU+系列多DIE FPGA的时序约束与跨DIE信号优化策略。针对2.5D/3D封装技术带来的时序挑战,详细解析了SLR区域约束、Laguna寄存器配置及跨时钟域约束等关键技术,提供了实用的TCL脚本和RTL优化示例,帮助开发者有效提升设计性能和时序收敛效率。

weixin_29209801的博客 654

智能体在车联网中的应用:一份详尽到每日的100天学习路线图

这100天的旅程,是一次对毅力、学习方法和工程实践能力的综合考验。它不仅关乎掌握一系列技术点,更关乎培养解决复杂系统性问题的思维模式——将宏观的交通需求分解为微观的智能体决策,再通过多智能体协同涌现出宏观的智能行为。当你完成这份大纲时,你将拥有的不仅是一个项目作品集,更是一套应对“智能体+车联网”乃至更广泛AI+垂直领域挑战的方法论。未来已来,期待你成为构建智能交通新生态的关键贡献者。

IT深耕十余载,大道之简 1333

深入了解stream流

super T,?super T,?super T,?super T,?super T,?其中最通用的应该就属mapv和flatMap两个方法了,下面将以不同的例子分别来讲解着两个方法。map()方法可以将一个流转换成另外一种对象的流,其中的T是原始流中元素的类型,而R则是转换之后的流中元素的类型。通过下面的代码我们将一个学生对象的 Stream 流转换成一个Double类型(学生的分数)的 Stream 流并求和后输出。

m0_48069349的博客 216

固定效应模型-以stata为工具

固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学和健康研究中被广泛应用。

侯小啾技术博客 2839

深入理解Java Stream流

文章目录背景Steram流的思想使用Stream流的例子获取流的两种方式1、根据Collection获取流2、根据Stream接口的静态方式of获取流Stream流的常用方法1、forEach2、filter3、map4、count5、limit6、skip7、concatSteram流的案例 背景 Java8新增了Stream流的API,允许用户使用lambda表达式,简单的操纵集合等数据结构。 Steram流的思想 Stream不会存储数据,是有关算法和计算的,Stream就如同一个高级的流水线

我的博客 1147

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入理解Java的Stream流

通过今天的学习,我们深入了解了 Java 的 Stream 流,从它的创建方式,到丰富的中间操作和终端操作,以及并行流的应用。Stream 流为我们提供了一种简洁、高效的方式来处理集合数据,让代码更加优雅、易读。在实际编程中,合理运用 Stream 流能够大大提高开发效率,减少代码量,同时充分发挥多核 CPU 的性能优势。希望大家在今后的 Java 编程中,能够熟练掌握并运用 Stream 流,为自己的代码注入新的活力。

潜意识Java的博客 911

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

深入理解Java 8中的Stream流

Stream提供了一种更加简洁、高效的方式来处理集合数据,同时也使得代码更具可读性和易于维护。本文将深入探讨Java 8中的Stream流,介绍其特性、操作和使用场景,帮助读者更好地理解和运用Stream流。Stream是Java 8中引入的一种数据流的概念,它代表了一系列元素的集合,可以是数组、集合或者其他数据源。与传统的集合操作相比,Stream提供了更加丰富、高效的数据处理方式。在这个示例中,我们首先创建了一个整数列表,然后使用Stream流对列表进行过滤、映射和终端操作,最终打印出结果。

勤劳的小琪 543

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java中的流stream_深入理解 Java中的 流 (Stream)

首先,流是什么?流是个抽象的概念。是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备能够是文件,网络,内存等。流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为參考,假设数据的流向是程序至设备。我们成为输出流,反之我们称为输入流。能够将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念。当程序须要从某个数据源读入数据...

weixin_39631344的博客 207

深入理解Java中的Collectors(Stream流)

Collectors 类是 Java 中的一个实用工具类,包含了一系列静态方法,这些方法用于创建各种常见的集合操作。它们用于将流中的元素累积到某些结果中,例如 List、Set、Map 等,还可以进行各种统计操作,如求和、平均、最小值、最大值等。Collectors 类位于 java.util.stream 包中,通常与 Stream 的 collect() 方法一起使用。它的设计遵循了函数式编程的原则,使得数据处理变得更加简洁和高效。

墨辰JC的博客 3748

深入理解 Java Stream 流:高效数据处理的利器

在 Java 编程领域,处理集合和数组是日常开发中极为常见的任务。Java 8 引入的 Stream 流,为我们提供了一种更为强大、高效且简洁的方式来操作数据集合,显著提升了 Java 在数据处理方面的能力,成为现代 Java 编程中不可或缺的一部分。

2201_75813105的博客 1079
上一篇: java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较
下一篇: 如何通俗的解释计算机是如何实现1+1=2计算的?
Busquets5
博客等级 码龄11年 13粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值