Rust文件大小是实际大小的两倍.如何处理



我需要从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编写的文本看起来像十六进制数据,而不是原始十六进制数据。

最新更新