仓颉编程语言:I/O 流

仓颉编程语言的基本输入输出介绍(修订) 仓颉编程语言提供的输入输出功能,主要通过std.io和std.env模块实现。示例代码展示了如何实现基本I/O操作、处理用户输入及数值转换。本文的示例在当前仓颉编程语言LTS 1.0.0中通过。因仓颉编程语言的基本输入输出方面变化较大,资料比较少见,特此详述。 阅读详情

本章我们会介绍基本的 I/O 概念和文件操作。

在仓颉编程语言中,我们将与应用程序外部载体交互的操作称之为 I/O 操作。I 对应输入(Input),O 对应输出(Output)。

仓颉编程语言所有的 I/O 机制都是基于数据流进行输入输出,这些数据流表示了字节数据的序列。数据流是一串连续的数据集合,它就像承载数据的管道,在管道的一端输入数据,在管道的另一端就可以输出数据。

仓颉编程语言将输入输出抽象为流(Stream):

  • 将数据从外存中读取到内存中的称为输入流(InputStream),输入端可以一段一段地向管道中写入数据,这些数据段会按先后顺序形成一个长的数据流;
  • 将数据从内存写入外存中的称为输出流(OutputStream),输出端也可以一段一段地从管道中读出数据,每次可以读取其中的任意长度的数据(不需要跟输入端匹配),但只能读取先输入的数据,再读取后输入的数据。

有了这一层抽象,仓颉编程语言就可以使用统一的接口来实现与外部数据的交互。

仓颉编程语言将标准输入输出、文件操作、网络数据流、字符串流、加密流、压缩流等等形式的操作,统一用 Stream 描述。

Stream 主要面向处理原始二进制数据,Stream 中最小的数据单元是 Byte。

仓颉编程语言将 Stream 定义成了 interface,它让不同的 Stream 可以用装饰器模式进行组合,极大地提升了可扩展性。

输入流

程序从输入流读取数据源(数据源包括外界的键盘、文件、网络...),即输入流是将数据源读入到程序的通信通道。

仓颉编程语言用 InputStream 接口类型来表示输入流,它提供了 read 函数,这个函数会将可读的数据写入到 buffer 中,返回值表示了该次读取的字节总数。

InputStream 接口定义:

interface InputStream {
    func read(buffer: Array<Byte>): Int64
}

当我们拥有一个输入流的时候,就可以像下面的代码那样去读取字节数据,读取的数据会被写到 read 的入参数组中。

输入流读取示例:

main() {
    let input: InputStream = ...
    let buf = Array<Byte>(256, item: 0)
    while (input.read(buf) > 0) {
        println(buf)
    }
}

输出流

程序向输出流写入数据。输出流是将程序中的数据输出到外界(显示器、打印机、文件、网络等)的通信通道。

仓颉编程语言用 OutputStream 接口类型来表示输出流,它提供了 write 函数,这个函数会将 buffer 中的数据写入到绑定的流中。

特别的,有一些输出流的 write 不会立即写到外存中,而是有一定的缓冲策略,只有当符合条件或主动调用 flush 时才会真实写入,目的是提高性能。

为了统一处理这些 flush 操作,在 OutputStream 中有一个 flush 的默认实现,它有助于抹平 API 调用的差异性。

OutputStream 接口定义:

interface OutputStream {
    func write(buffer: Array<Byte>): Unit

    func flush(): Unit {
        // 空实现
    }
}

当我们拥有一个输出流时,我们可以像下面的代码那样去写入字节数据。

输出流写入示例:

main() {
    let output: OutputStream = ...
    let buf = Array<Byte>(256, item: 111)
    output.write(buf)
    output.flush()
}

数据流分类

按照数据流职责上的差异,我们可以给 Stream 简单分成两类:

  • 节点流:直接提供数据源,节点流的构造方式通常是依赖某种直接的外部资源(即文件、网络等)。
  • 处理流:只能代理其它数据流进行处理,处理流的构造方式通常是依赖其它的流。

 看完三件事❤️

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注作者公众皓 『 蜀道衫 』,不定期分享原创知识。
  • 关注后回复【666】扫码即可获取学习资料包。
  • 同时可以期待后续文章ing🚀。

​

鸿蒙HarmonyOS应用开发 | 仓颉开发语言中的 I/O 操作详解 在仓颉编程语言中,I/O 操作是指与外部载体(如文件、网络、终端等)进行数据交互的过程。仓颉将所有 I/O 操作抽象为数据流(Stream),它们是一串连续的字节数据,形成了数据输入输出的管道。输入流(InputStream):将数据从外存读入内存。输出流(OutputStream):将内存中的数据写入外存。这两种流的设计允许程序以统一的接口进行数据交互,大大简化了不同 I/O 操作的处理。通过本文,我们深入探讨了仓颉编程语言中的 I/O 流概念及其实现方式。 阅读详情

相关推荐

告别环境报错:Qt Creator里配置Android SDK/NDK/JDK路径的完整避坑指南

本文详细解析了在Qt Creator中配置Android SDK/NDK/JDK路径的完整避坑指南,深入探讨了路径检测的内部机制、构建套件配置的隐藏逻辑以及项目级与全局配置的优先级。通过实际案例和高级排查技巧,帮助开发者解决常见的环境报错问题,提升Qt安卓开发效率。

weixin_42548829的博客 238

仓颉语言---I/O流机制

标准输出流:负责将数据从内存写出到外存。输出端可以一段一段地从管道中读出数据,每次可读取任意长度的数据(不要求与输入端匹配),但需遵循先入先出原则。标准输入流::负责将数据从外存读取到内存。输入端可一段一段地向管道中写入数据,这些数据段按先后顺序形成长数据流。示例代码:1、BufferedOutputStream() 是为另一个输出流添加缓冲功能。2、BufferedInputStream() 为另一个输入流添加缓冲功能。示例代码:1、读取输入流,并在控制台打印。读取文件内容,将外部文件内容读取到内存中。

w_zero_one的博客 721

基于FaceX-Zoo实现的Face Mask Adding人脸戴口罩

人脸系列文章目录 文章目录人脸系列文章目录前言一、加口罩效果二、实现原理二、代码实现 前言 目前人脸加口罩均为在人脸位置贴图式的,非常不真实。前段时间京东开源一个基于PRnet实现的3D口罩拟合人脸,加口罩非常逼真,但是只是单独一个加口罩demo,没有完整的流程。于是本人结合人脸检测,关键点对齐。PRnet加口罩实现一个完整的加口罩流程。只需一个命令简单方便调用,实现人脸加口罩。 https://github.com/JDAI-CV/FaceX-Zoo 一、加口罩效果 下图可以看出效果还是非常逼真的

zengwb的博客 3391

华为仓颉语言入门(1):仓颉概述

本文介绍了仓颉编程语言的基础内容,包括编写第一个程序、使用 `println()` 输出函数以及注释的书写方法。通过简单的示例代码,展示了仓颉语言的基本功能和语法规则,同时扩展了用户输入功能和变量输出。本文旨在帮助读者快速上手仓颉编程语言,理解其基础概念,为后续更复杂的开发任务做好准备。

一个被知识诅咒的人 1358

本地部署静态网站托管平台 Netlify 并实现外部访问(Windows 版本)

Netlify 是一款基于云计算的网站部署和托管平台,专为开发者提供便捷的静态网站和 Jamstack 应用部署服务。它的能力在于将网站构建、部署、托管以及持续集成等流程高度集成,简化了开发和运维的复杂程度。用户无需关心服务器的配置、维护等工作。本文将详细介绍如何在本地安装 Netlify 以及结合路由侠内网穿透实现外网访问 Netlify。

lyxnwct的博客 525

MATLAB基础应用精讲-【数模应用】PPO算法(附python代码实现)(二)

表示为状态转移概率和动作选择概率的乘积,因为状态和动作决定轨迹。

qq_36130719的博客 413

跟我一起学“仓颉”编程语言-基本输入输出流

本章为大家详细的介绍了仓颉编程语言中基本输入输出流的内容。

Cool_foolisher的博客 1478

YOLOv12涨点改进 | 全网独家首发Conv改进篇 | Arxiv 2025 | 引入一种新的WConv加权卷积改进YOLOv12,显著提升其特征提取能力和目标检测精度

本文提出了一种新型加权卷积(WConv)模块,通过引入最优密度函数动态调整邻域像素权重,显著提升了YOLOv12目标检测性能。WConv在保持参数数量不变的情况下,提高了模型精度(VGG准确率提升10%)、增强了小目标检测能力,并改善了多尺度特征提取。文中详细介绍了模块原理、网络结构改进方法,并提供了核心代码实现和yaml配置文件。实验表明,该方法在图像任务中最高可降低53%的损失,虽然会带来11%的时间开销,但具有优异的鲁棒性。该技术可广泛应用于2D/3D图像处理领域。

Ai缝合怪、助力小伙伴高效发论文 218

华为仓颉|新一代高性能编程语言

华为公司推出了自有的编程语言——仓颉(Cangjie)。这款语言定位于高性能计算和高安全性应用,旨在解决现代开发中的一系列痛点。小编经过两天的漫长等待后,终于通过审核,拿到了仓颉编译工具。现在华哥就给大家来开箱体验下。仓颉支持多种基本数据类型,包括整数、浮点数、布尔值、字符串等。整数类型:用于表示整数值,可以是有符号或无符号。浮点数类型:用于表示带有小数点的数值。布尔类型:用于表示逻辑真或假。字符串类型:用于表示文本数据。以冒号引出类型定义,这点跟typecript很像。

liyunhua258的博客 5405

华为od 面试八股文_数据库_01_含答案

华为od 面试八股文_数据库_01_含答案

MISAYAONE的博客 2168

第4章 部署负载均衡 Keepalived + HAProxy

本章在所有 Master 节点部署 Keepalived + HAProxy,为 kube-apiserver 提供高可用入口。Keepalived 实现 VIP(192.168.3.59)漂移,HAProxy 轮询转发请求至三个 Master 的 6443 端口(监听 6444 避免冲突)。健康检查脚本连续 5 次失败则停止 Keepalived,触发 VIP 自动切换。本章还包含配置详解、日常运维和问题排查。

幸福街--linux技术分享 123

跟我一起学“仓颉”编程语言-文件操作

本章为大家详细的介绍了仓颉编程语言中文件操作的内容。

Cool_foolisher的博客 1308

EDKII环境配置完整版

参考博客【EDK2 UDK2018的环境搭建】:https://blog.youkuaiyun.com/qq_39155263/article/details/82965744下载EDK2 1.直接从https://github.com/tianocore/edk2/ 网站下载.zip压缩文件 2.运用svn 从http://svn.code.sf.net/p/edk2/code/trunk/edk2edk2下载 3.安装Visual Studio2017 安装其他Tool 1.IASL 从https..

tianpu2320959696的博客 1857

仓颉编程语言:I/O 节点流

节点流是指直接提供数据源的流,节点流的构造方式通常是依赖某种直接的外部资源(即文件、网络等)。

Androidbye的博客 1336

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

仓颉编程语言入门 -- I/O 节点流详解

节点流,作为数据流体系中的基石,直接关联到外部数据源,如文件、网络等。在仓颉编程语言中,节点流扮演了关键角色,它们不仅是数据流动的起点或终点,也是与外部世界交互的桥梁。

几许的博客 1万+

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

仓颉编程语言入门 -- I/O 流概述

在仓颉编程语言的设计理念中,与外部实体(如文件系统、网络、用户输入等)的数据交换活动被统称为I/O操作,其中“I”代表输入(Input),而“O”则代表输出(Output)。这些操作的核心在于数据流(Stream)的概念,数据流作为字节数据的连续序列,扮演着数据传输管道的角色。仓颉编程语言对I/O机制进行了高度的抽象,引入了输入流(InputStream)和输出流(OutputStream)的概念。输入流负责从外部存储(如硬盘、网络等)向内存连续地传输数据,允许数据以片段形式逐步被读取并构建成完整的数据流。

几许的博客 1262

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

仓颉之I/O 操作的交互奥秘

案例结合代码体验,让大家更直观的了解仓颉语言中的IO操作。

华为云官方博客 1523

仓颉编程语言:I/O 处理流

处理流是指代理其它数据流进行处理的流。

Androidbye的博客 889

仓颉编程语言入门

五年磨一剑,华为仓颉编程语言正式发布。

程小二的博客 4万+

仓颉语言 -- 基础 I/O 操作

仓颉语言 -- 基础 I/O 操作

chinusyan的专栏 2289

仓颉技术异步 I/O 实现:原理剖析与深度实践​

摘要:仓颉语言通过协程化异步操作和事件驱动模型,实现了高性能异步I/O。其核心设计融合了async/await语法糖、IOCP/Kqueue机制和线程池调度,解决了传统异步编程的回调地狱问题。实践案例显示,在1000个日志文件的关键词统计场景中,仓颉异步I/O相比同步方案耗时降低88.1%,CPU利用率提升4-8倍。底层采用分层架构,将应用层API与操作系统事件通知解耦,并支持Promise机制实现协程挂起/唤醒。仓颉在性能、安全性及易用性上优于Rust、Go等语言,是高并发I/O场景的理想选择。

2501_94022820的博客 708

流式I/O的设计模式:仓颉语言的实践与思考

仓颉语言的流式I/O设计体现了现代编程语言在性能与易用性之间的平衡。通过类型安全的接口、零成本抽象、异步支持等特性,开发者能够构建高效且可维护的I/O密集型应用。理解流式处理的本质——数据的连续流动而非批量加载——是掌握这一模式的关键。在实践中,需要根据具体场景选择合适的缓冲策略、错误处理方式和并发模型,才能充分发挥流式I/O的优势。

2401_89688708的博客 854

仓颉语言中流式I/O的设计模式:原理与实践

更深层次的设计考量在于资源管理的自动化。仓颉语言作为华为主导开发的新一代编程语言,其流式I/O设计模式体现了对传统I/O模型的深度思考与创新突破。通过内存映射(mmap)和直接缓冲区机制,数据在内核态和用户态之间的传输避免了不必要的拷贝操作,显著提升了大文件处理和网络I/O的性能。未来,随着仓颉生态的完善,我们期待看到更多基于流式I/O的创新应用模式,如响应式数据流、分布式流处理框架等。语法糖,开发者可以用同步代码的风格编写异步I/O逻辑,既保证了代码的可读性,又获得了非阻塞I/O的高并发性能。

2501_94026421的博客 711

华为仓颉编程语言正式发布,仓颉编程教程

华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。仓颉 | 华为开发者联盟仓颉编程语言文件后缀名为.cj你好,仓颉。lambda表达式可以让函数的创建和使用更加灵活,lambda表达式的值就是一个匿名函数仓颉提供了Exception和Error两个类型,用于描述程序运行时的异常行为开发者可以继承Exception或其子类来自定义异常类,但不能继承Error或其子类。

shixuyong的博客 4408

仓颉编程语言开发指南(上)

仓颉编程语言是一种面向全场景应用开发的通用编程语言,可以兼顾开发效率和运行性能,并提供良好的编程体验,主要具有如下特点:语法简明高效:仓颉编程语言提供了一系列简明高效的语法,旨在减少冗余书写、提升开发效率,例如插值字符串、主构造函数、Flow 表达式、match、if-let、while-let 和重导出等语法,让开发者可以用较少编码表达相关逻辑。 多范式编程:仓颉编程语言支持函数式、命令式和面向对象等多范式编程,融合了高阶函数、代数数据类型、模式匹配、泛型等函数式语言的先进特性,还有封装、接口、继承、子类

欢迎来到我的学习笔记薄 2086

仓颉语言中的异步I/O实现:从原理到实践

仓颉语言的异步I/O实现代表了现代编程语言在并发处理方面的先进理念。通过将协程、事件循环和类型系统有机结合,它为开发者提供了既高效又易用的异步编程体验。在实际应用中,合理运用这些特性能够构建出性能卓越且代码清晰的系统。

毅慎的博客 733
上一篇: 仓颉编程语言:线程睡眠指定时长 sleep
下一篇: 仓颉编程语言:I/O 节点流
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值