我需要从rust部分获取大量数据。所以,我需要写文件来保存它们。数据的大小是2^27,每个元素都是256位。当我把它们写到ssd时,检查文件的大小,大小是我计算的值的两倍。
对于这个问题,我写";测试";一个256位的文件10次。根据计算的大小是320B,但文件大小是640B。
我不知道,其他320 B是什么?线路和数据都是正确的,我如何解决生锈的问题?
代码如下:
use std::io::prelude::*;
use std::fs::File;
fn main() {
let mut file = File::create("/home/test/1.txt").unwrap();
let s = b"de0b143e8f548ff5ec6d9e6e6e2ad07362d7cfbaac778561ba7da98dbb6eb4b";
let mut i = 0;
while i < 10{
file.write(s).unwrap();
file.write(&"n".as_bytes()).unwrap();
i += 1;}
}
正如评论中已经提到的,您的问题似乎与字节串与字节数组有关。
以下是您的示例,修改为写入字节数组:
use std::fs::File;
use std::io::prelude::*;
fn main() {
let mut file = File::create("test.txt").unwrap();
//let s = b"de0b143e8f548ff5ec6d9e6e6e2ad07362d7cfbaac778561ba7da98dbb6eb4b";
let byte_str = vec![
0xde, 0x0b, 0x14, 0x3e, 0x8f, 0x54, 0x8f, 0xf5, 0xec, 0x6d, 0x9e, 0x6e, 0x6e, 0x2a, 0xd0,
0x73, 0x62, 0xd7, 0xcf, 0xba, 0xac, 0x77, 0x85, 0x61, 0xba, 0x7d, 0xa9, 0x8d, 0xbb, 0x6e,
0xb4, 0xb0
];
let mut i = 0;
while i < 10 {
file.write(&byte_str).unwrap();
file.write(&"n".as_bytes()).unwrap();
i += 1;
}
}
这会生成一个如下所示的文件:
~> hexdump -C test.txt
00000000 de 0b 14 3e 8f 54 8f f5 ec 6d 9e 6e 6e 2a d0 73 |...>.T...m.nn*.s|
00000010 62 d7 cf ba ac 77 85 61 ba 7d a9 8d bb 6e b4 b0 |b....w.a.}...n..|
00000020 0a de 0b 14 3e 8f 54 8f f5 ec 6d 9e 6e 6e 2a d0 |....>.T...m.nn*.|
00000030 73 62 d7 cf ba ac 77 85 61 ba 7d a9 8d bb 6e b4 |sb....w.a.}...n.|
00000040 b0 0a de 0b 14 3e 8f 54 8f f5 ec 6d 9e 6e 6e 2a |.....>.T...m.nn*|
00000050 d0 73 62 d7 cf ba ac 77 85 61 ba 7d a9 8d bb 6e |.sb....w.a.}...n|
00000060 b4 b0 0a de 0b 14 3e 8f 54 8f f5 ec 6d 9e 6e 6e |......>.T...m.nn|
00000070 2a d0 73 62 d7 cf ba ac 77 85 61 ba 7d a9 8d bb |*.sb....w.a.}...|
00000080 6e b4 b0 0a de 0b 14 3e 8f 54 8f f5 ec 6d 9e 6e |n......>.T...m.n|
00000090 6e 2a d0 73 62 d7 cf ba ac 77 85 61 ba 7d a9 8d |n*.sb....w.a.}..|
000000a0 bb 6e b4 b0 0a de 0b 14 3e 8f 54 8f f5 ec 6d 9e |.n......>.T...m.|
000000b0 6e 6e 2a d0 73 62 d7 cf ba ac 77 85 61 ba 7d a9 |nn*.sb....w.a.}.|
000000c0 8d bb 6e b4 b0 0a de 0b 14 3e 8f 54 8f f5 ec 6d |..n......>.T...m|
000000d0 9e 6e 6e 2a d0 73 62 d7 cf ba ac 77 85 61 ba 7d |.nn*.sb....w.a.}|
000000e0 a9 8d bb 6e b4 b0 0a de 0b 14 3e 8f 54 8f f5 ec |...n......>.T...|
000000f0 6d 9e 6e 6e 2a d0 73 62 d7 cf ba ac 77 85 61 ba |m.nn*.sb....w.a.|
00000100 7d a9 8d bb 6e b4 b0 0a de 0b 14 3e 8f 54 8f f5 |}...n......>.T..|
00000110 ec 6d 9e 6e 6e 2a d0 73 62 d7 cf ba ac 77 85 61 |.m.nn*.sb....w.a|
00000120 ba 7d a9 8d bb 6e b4 b0 0a de 0b 14 3e 8f 54 8f |.}...n......>.T.|
00000130 f5 ec 6d 9e 6e 6e 2a d0 73 62 d7 cf ba ac 77 85 |..m.nn*.sb....w.|
00000140 61 ba 7d a9 8d bb 6e b4 b0 0a |a.}...n...|
0000014a
(注意:hexdump输出将文件的内容显示为原始二进制和文本。第一列是"十六进制字节数",下一个块是用十六进制编写的文件的原始二进制,右边的部分是该十六进制翻译为文本的内容(
您的原始程序生成的文件如下所示:
00000000 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000010 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000020 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000030 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000040 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000050 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000060 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000070 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000080 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000090 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
000000a0 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
000000b0 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
000000c0 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
000000d0 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
000000e0 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
000000f0 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000100 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000110 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000120 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000130 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000140 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000150 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000160 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000170 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000180 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000190 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
000001a0 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
000001b0 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
000001c0 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
000001d0 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
000001e0 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
000001f0 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000200 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000210 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000220 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000230 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000240 64 65 30 62 31 34 33 65 38 66 35 34 38 66 66 35 |de0b143e8f548ff5|
00000250 65 63 36 64 39 65 36 65 36 65 32 61 64 30 37 33 |ec6d9e6e6e2ad073|
00000260 36 32 64 37 63 66 62 61 61 63 37 37 38 35 36 31 |62d7cfbaac778561|
00000270 62 61 37 64 61 39 38 64 62 62 36 65 62 34 62 0a |ba7da98dbb6eb4b.|
00000280
由于数据是以字符串形式给出的,rust编写的文本看起来像十六进制数据,而不是原始十六进制数据。