Julia文件读写函数:write和read

文章目录

初步认识

Julia提供了异常便捷的文件读写函数,read和write,例如,下面的代码用write将字符串写入到tiny.txt文件中,然后用read将tiny.txt的内容以字符串的形式读取到变量a中,然后输出a,其内容正是我们写入的tiny cool。

matlab 复制代码
> write("tiny.txt", "tiny cool");
> a = read("tiny.txt", String);
> a
"tiny cool"

write还支持多组数据写入,所以下面的语句也是合法的,其写入的文件内容为tinycool。

matlab 复制代码
> write("tiny.txt", "tiny", "cool");

函数详解

Julia对这两个函数提供了多种重载方法,首先这两个函数的第一个参数,既可以是字符串表示的路径,也可以是IO或者IOStream类型。而write的第二个参数,就是想要写入的数据,Julia会自动识别数据类型,如果是字符串就存为文本格式,否则一般是按照二进制形式存储。

read相对来说稍显复杂,其第二个参数有下面几种情况:

  • 数据类型,例如上面示例中,把tiny.txt这个文件读取为String格式
  • 缺省,表示以二进制形式读取数据
  • 整数nb,表示读取nb个字节的数据

IO类型,即输入输出类型,是Julia中的一种数据结构,例如例如stdout表示标准输出,stdin表示标准输入,read可以从标准输入读取数据,而write可以将数据写入标准输出,效果如下

matlab 复制代码
> write(stdout, "hello world")
hello world
> a = read(stdin, Char)
x
> a
'x': ASCII/Unicode U+0078 (category Ll: Letter, lowercase)

其中x是手动输入的,需要注意,如果想从标准输入读取数据,那么数据类型不能是字符串,因为字符串是无限长的,会陷入死循环。

read!

在Julia中,普通函数并不会改变输入参数的值,所以read函数只能把读取到的数据作为返回值,传给另一个参数。但返回值的数据类型往往不确定,所以必须要添加一个数据类型参数,相对来说比较繁琐。

相比之下,read!有了!的加持,就可以实现对输入参数的更改,从而可以直接将文件内容写入数组

matlab 复制代码
> write("a.bin", ones(Int, 5, 5));
> x = zeros(UInt8, 8);
> read!("a.bin", x);
> x
8-element Vector{UInt8}:
 0x01
 0x00
 0x00
 0x00
 0x00
 0x00
 0x00
 0x00

其中,write把64位整形 5 × 5 5\times5 5×5的矩阵写入a.bin文件。

然后把x定义为8位无符号整型的数组,其长度为8。

接下来通过read!函数,将a.bin文件中的内容写入x,由于x的数据类型是8位无符号整型,所以64位整型的1在读取之后,被拆分成8个UInt8数据,出了第一个是1之外,剩下都是0。

相关推荐
charlie1145141913 天前
嵌入式Linux入门具备:C语言基础与基本驱动学习(2):Linux GIibc IO基础
c语言·学习·c·io·嵌入式软件
我要学编程(ಥ_ಥ)3 天前
初始JavaEE篇 —— 文件操作与IO
java·开发语言·java-ee·io·文件操作
Mr.W.T3 天前
NIO 核心知识总结
io·nio
奔跑的废柴16 天前
【黑马Redis原理篇】Redis网络模型
网络·redis·io
追逐远方的梦1 个月前
Julia的安装和使用(附vscode中使用)
开发语言·vscode·julia
一丝晨光1 个月前
标准输入输出
java·c++·python·c#·go·c·io
闲人编程2 个月前
Python实现Socket.IO的完整指南
开发语言·python·网络编程·io·socket·异步
闲人编程2 个月前
Python实现 Socket.IO 的在线游戏场景
开发语言·python·游戏·网络编程·io·socket·异步
枫叶丹42 个月前
【在Linux世界中追寻伟大的One Piece】五种IO模型和阻塞IO
java·运维·开发语言·网络·jvm·io
promise5242 个月前
Linux性能监控神器:深入top命令详解与磁盘IO分析技巧
linux·运维·服务器·后端·性能优化·bash·io