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

华为仓颉语言的技术梗概,底层原理是什么?什么架构,以后会替换JAVA语言了,信创背景下,要不要开始进入仓颉赛道,详细为您剖析仓颉语言 仓颉语言允许开发者定义自己的控制结构,通过使用闭包和高阶函数来实现。action();"); 阅读详情

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

仓颉编程语言中常见的节点流包含标准流(StdIn、StdOut、StdErr)、文件流(File)、网络流(Socket)等。

我们本章会着重介绍一下标准流和文件流。

标准流

标准流包含了标准输入流(stdin)、标准输出流(stdout)和标准错误输出流(stderr)。

标准流是我们的程序与外部数据交互的校准接口。程序运行的时候从输入流读取数据,作为程序的输入,程序运行过程中输出的信息被传送到输出流,类似的,错误信息被传送到错误流。

在仓颉编程语言中我们可以使用 Console 类型来分别访问它们。

使用 Console 类型需要导入 console 包:

导入 console 包示例:

import std.console.*

Console 对三个标准流都进行了易用性封装,提供了更方便的基于 String 的扩展操作,并且对于很多常见类型都提供了丰富的重载来优化性能。

其中最重要的是 Console 提供了并发安全的保证,我们可以在任意线程中安全的通过 Console 提供的接口来读写内容。

默认情况下标准输入流来源于键盘输入的信息,例如我们在命令行界面中输入的文本。

当我们需要从标准输入流中获取数据时,可以通过 stdIn 来读取,例如通过 readln 函数来获取命令行的输入。

标准输入流读取示例:

import std.console.*

main() {
    let txt = Console.stdIn.readln()
    println(txt ?? "")
}

运行上面的代码,在命令行上输入一些文字,然后换行结束,我们就能看到我们输入的内容了!

输出流分为标准输出流和标准错误流,默认情况下,它们都会输出到屏幕,例如我们在命令行界面中看到的文本。

当我们需要往标准输出流中写入数据时,可以通过 stdOut/stdErr 来写入,例如通过 write 函数来向命令打印内容。

使用 stdOut 和直接使用 print 函数的差别是,stdOut 是并发安全的,并且 stdOut 使用了缓存技术,在输入内容较多时拥有更好的性能表现。

需要注意的是,写完数据后我们需要对 stdOut 调用 flush 才能保证内容被写到标准流中。

标准输出流写入示例:

import std.console.*

main() {
    for (i in 0..1000) {
        Console.stdOut.writeln("hello, world!")
    }
    Console.stdOut.flush()
}

文件流

仓颉编程语言提供了 fs 包来支持通用文件系统任务。虽然不同的操作系统对于文件系统提供的接口有所不同,但是仓颉编程语言抽象出以下一些共通的功能,通过统一的功能接口,屏蔽不同操作系统之间的差异,来简化我们的使用。

这些常规操作任务包括:创建文件/目录、读写文件、重命名或移动文件/目录、删除文件/目录、复制文件/目录、获取文件/目录元数据、检查文件/目录是否存在。具体 API 可以查阅库文档。

使用文件系统相关的功能需要导入 fs 包:

导入 fs 包示例:

import std.fs.*

本章会着重介绍 File 相关的使用,对于 Path 和 Directory 的使用可以查阅对应的 API 文档。

File 类型在仓颉编程语言中同时提供了常规文件操作和文件流两类功能。

常规文件操作

对于常规的文件操作,我们可以使用一系列静态函数来完成快捷的操作。

例如我们如果要检查某个路径对应的文件是否存在,可以使用 exists 函数。当 exists 函数返回 true 时表示文件存在,反之不存在。

exists 函数使用示例:

import std.fs.*

main() {
    let exist = File.exists("./tempFile.txt")
    println("exist: ${exist}")
}

移动文件、拷贝文件和删除文件也非常简单,File 同样提供了对应的静态函数 move、copy、delete。

move、copy、delete 函数使用示例:

import std.fs.*

main() {
    File.copy("./tempFile.txt", "./tempFile2.txt", false)
    File.move("./tempFile2.txt", "./tempFile3.txt", false)
    File.delete("./tempFile3.txt")
}

如果我们需要直接将文件的所有数据读出来,或者一次性将数据写入文件里,我们可以使用 File 提供的 readFrom、writeTo 函数直接读写文件。在数据量较少的情况下它们既简单易用又能提供较好的性能表现,让我们不需要手动处理数据流的事情。

readFrom、writeTo 函数使用示例:

import std.fs.*

main() {
    let bytes = File.readFrom("./tempFile.txt") // 一次性读取了所有的数据
    File.writeTo("./otherFile.txt", bytes) // 把数据一次性写入另一个文件中
}

文件流操作

除了上述的常规文件操作之外,File 类型也被设计为一种数据流类型,因此 File 类型本身实现了 IOStream 接口。当我们创建了一个 File 的实例,我们就可以把这个实例当成数据流来使用。

File 类定义:

public class File <: Resource & IOStream & Seekable {
    ...
}

File 提供了两种构造方式,一种是通过两个方便的静态函数 openRead/create 直接打开文件或创建新文件的实例,另一种是通过构造函数传入完整的打开文件选项来构造新实例。

其中,openRead 打开的文件是只读的,我们不能对实例进行写操作,否则会抛出运行时异常;而 create 创建的文件是只写的,我们不能对实例进行读操作,否则也会抛出运行时异常。

File 构造示例:

// 创建
let file = File.create("./tempFile.txt")
file.write(b"hello, world!")

// 打开
let file2 = File.openRead("./tempFile.txt")
let bytes = file2.readToEnd() // 读取所有数据
println(bytes)

当我们需要更精细的打开选项时,可以使用构造函数传入一个 OpenOption 值。OpenOption 是一个 enum 类型,它提供了丰富的文件打开选项,例如 Append、Create、Truncate、Open 以及其它便捷的复合操作。

File 打开选项使用示例:

// 使用指定选项打开文件
let file = File("./tempFile.txt", OpenOption.Truncate(false))
...

因为我们打开 File 的实例会占用宝贵的系统资源,所以使用完 File 的实例之后需要注意及时关闭 File,以释放系统资源。

所幸 File 实现了 Resource 接口,我们在大多数时候都可以使用 try-with-resource 语法来简化我们的使用。

try-with-resource 语法使用示例:

try (file2 = File.openRead("./tempFile.txt")) {
    ...
    // 结束使用后自动释放文件
}

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,

内容包含了:(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击关注 → 公众皓 :【蜀道衫】即可领取

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线, 请点击关注 → 公众皓 :【蜀道衫】即可领取

《鸿蒙 (OpenHarmony)开发入门教学视频》

​

《鸿蒙生态应用开发V2.0白皮书》

图片​

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片​

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片​

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片​

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片​

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 


 看完三件事❤️

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

​

仓颉编程语言快速入门:从零开始构建你的第一个程序 编程语言的演进本质是对计算本质的重新定义。仓颉语言通过融合学术前沿成果与工业级工程实践,不仅为开发者提供了高效可靠的工具,更在重塑我们对“智能时代软件开发”的认知。从一个简单的“Hello World”出发,每一次代码提交都在参与书写中国基础软件的未来。 阅读详情

相关推荐

鸿蒙HarmonyOS应用开发 | 深入解析 HarmonyOS Next 中的仓颉语言

仓颉语言是专为 HarmonyOS Next 设计的编程语言,它具有简洁、高效、易读易写等特点。仓颉语言借鉴了多种现代编程语言的优点,同时结合了 HarmonyOS Next 的特性,使得开发者能够更加高效地开发出高质量的应用。仓颉语言在 HarmonyOS Next 开发中具有重要的地位,它的简洁性、高效性和与 HarmonyOS Next 的深度融合,使得开发者能够更加轻松地开发出高质量的应用。随着 HarmonyOS Next 的不断发展,仓颉语言也将不断完善和壮大,为开发者带来更多的惊喜和便利。

一键难忘的博客 5840

仓颉编程语言来了-仓颉编程语言白皮书

卓越性能:仓颉编译器及运行时从全栈对编译进行优化,包括编译器前端基于CHIR(Cangjie HighLevel IR)高层编译优化(比如语义感知的循环优化、语义感知的后端协同优化等),基于后端的编译优化(比如:SLP向量化、Intrinsic优化、InlineCache、过程间指针优化、Barrier优化等),基于运行时的优化(比如轻量锁、分布式标记、并发Tracing优化等),一系列的优化让仓颉充分发挥处理器能力,为应用提供卓越的性能支持。此外,仓颉还支持类型推断,能够降低开发者类型标注的负担;

Neo的博客 4339

鸿蒙HarmonyOS应用开发 | 仓颉开发语言中的 I/O 操作详解

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

一键难忘的博客 2889

华为自研编程语言“仓颉“在HDC 2024首次公开:一文带你了解仓颉语言特性

编程语言的演变从未停止过。在2024年6月23日的华为开发者大会(HDC)上,华为隆重发布了一种全新的编程语言——仓颉语言(Cangjie Language)。旨在提升开发效率和代码的可维护性,特别是为大数据和人工智能应用提供强有力的支持。以满足现代软件开发的高效性、易用性和跨平台兼容性的需求。本文将深入探讨仓颉语言的特点,与主流编程语言进行对比,分析其在各种应用场景中的优势。

qq_42120268的博客 8985

前导0预测(Leading-Zero Anticipator,LZA)

前导0预测(Leading-Zero Anticipator,LZA) 浮点加法在完成之后会进行尾数规格化移位,而在进行尾数加法时,可以使用前导0预测(Leading-Zero Anticipator,LZA)同时计算移位,前导0预测只发生在一个正数加上一个负数的情况下,电路图如图1所示。 图1 传统LZD算法和LZA算法 1. 基础算法 算法的目标是计算出加法结果序列左边连续0的数量,下文中对...

crw1111111的博客 7383

Proxmox VE(PVE)与UPS联动配置:实现智能断电保护方案

本文详细介绍了为Proxmox VE (PVE)服务器配置UPS智能断电保护的完整方案。通过安装和配置apcupsd软件,实现PVE与UPS的联动,可在市电中断、电池电量不足时自动触发安全关机流程,有效保护虚拟机数据与服务连续性。文章涵盖了硬件选择、软件配置、策略设定及实战测试指南,并扩展了网络共享UPS的高级应用。

python9snake的博客 511

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

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

几许的博客 1万+

SAP 超详细解析信用控制

当然,集团内中国区、日本或欧洲区的公司使用了不同本位货币会计核算虽然分开,但对于客户的信用也可以统一管 理的,只要将这些不同本位币的公司代码纳入同一信用控制范围,信用控制范围货币可以考虑使用总部集团的货币,各公司代码的信用发生额自动根据系统设定汇率 转换为统一的信用控制范围货币。此步有一个“覆盖CC范 围”的选项,表示在过账时此步缺省的分配给公司代码的信用控制范围可以在其它信用控制范围使用,有时当一个公司代码的客户需要将信用数据过账到其它信用控 制区域,这个选择就非常有必要。

matinal 當冬夜漸暖 。公众号:matinal 1万+

仓颉编程语言:I/O 流

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

Androidbye的博客 1242

AI 编程新范式:一文彻底搞懂 LLM、Agent、MCP、Skill 是怎么协作的

本文用通俗易懂的方式解析了AI编程新架构的核心概念。通过"三国演义"类比,文章将复杂的技术架构拆解为:Agent(军师/大脑)负责思考和决策,Skill(招式/手脚)执行具体操作,MCP(令箭/协议)作为通信标准,MCP Server(将军/身体)承载多个Skill。这套分工架构使AI从单纯聊天进化成能完成实际编程任务的全能助手,实现了关注点分离——Agent专注智能提升,Skill专注功能实现,MCP确保稳定连接。这正是Cursor、Claude等新一代AI开发工具采用的核心架构,标志

猫老板的豆 3085

基于Python的上市公司年报PDF文本抓取与财务风险分析系统

随着大数据时代的到来,金融数据分析已成为投资决策和风险管理的重要工具。上市公司年报包含了丰富的财务信息和经营数据,通过对这些数据的提取和分析,可以评估公司的财务状况和潜在风险。本文将详细介绍如何使用Python构建一个完整的上市公司年报文本抓取与财务风险分析系统,涵盖PDF文本提取、数据清洗、财务指标计算和风险分析等全流程。

2201_76125261的博客 314

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

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

几许的博客 1262

Flow Matching05:概率路径与插值【概率路径:线性插值路径(最简单)、高斯插值路径】【先尝试线性插值,看效果如何;若不够好,尝试高斯插值】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 174

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

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

华为云官方博客 1523

R语言机器学习算法实战系列(十一)MLP算法分类器 (Multi-Layer Perceptrons)

本文介绍了多层感知器(MLP)分类算法的原理和计算步骤,并通过R语言实现MLP模型。MLP是一种前馈神经网络,包含输入层、隐藏层和输出层,通过激活函数引入非线性,利用前向传播和反向传播进行训练。文章详细描述了数据预处理、数据切割、模型构建、预测和评估等步骤,并提供了乳腺癌数据集(BreastCancer_clean.csv)的下载链接。通过R包如neuralnet和caret,读者可以逐步实现MLP模型,并评估其分类性能。

专注生信领域 936

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

算法大师! 630

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

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

Androidbye的博客 889

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

仓颉编程语言入门

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

程小二的博客 4万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

仓颉语言 -- 基础 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

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

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

liyunhua258的博客 5405

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

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

shixuyong的博客 4408

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

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

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

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

文章目录仓颉编程语言开发指南(上)十五、宏1.宏的简介2.Tokens 相关类型和 quote 表达式Token 类型Tokens 类型quote 表达式和插值3.语法节点节点的解析使用解析表达式和声明的函数使用构造函数进行解析节点的组成部分BinaryExpr 案例FuncDecl 案例使用 quote 插值语法节点4.宏的实现非属性宏属性宏嵌套宏宏定义中嵌套宏调用宏调用中嵌套宏调用嵌套宏之间的消息传递5.编译、报错与调试宏的编译和使用并行宏展开diagReport 报错机制使用 --debug-macr

欢迎来到我的学习笔记薄 2994
上一篇: 仓颉编程语言:I/O 流
下一篇: 仓颉编程语言:I/O 处理流
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值