提问人:aga 提问时间:5/19/2016 更新时间:11/15/2023 访问量:475
在 java 中 Files IO 的最佳方式是什么
What is the best way for Files IO in java
问:
我需要在java中对图像文件进行一些基本操作。我的要求是这样的:
- 打开一个文件。
- 按某种顺序读取字节。
- 在特定偏移量处写入更新的字节
- 在文件中寻找一些偏移量。
文件可以是任何大小,例如 2 GB 图像文件。
我想知道,考虑到 java 中的 IO 很慢,java 中的哪个类可以让我灵活地轻松完成所有这些操作并提高性能效率。
目前我正在考虑 FileChannel,但我不知道它在处理 GB 等较大文件时的性能。它还用于读取 ByteBuffer 中的文件字节,但如果文件足够大,是否适合同时读取所有字节或应该分块读取。如果我以块形式读取数据,块的合适大小是多少?
请指导我。
谢谢
答:
2赞
hgrey
5/19/2016
#1
您可能应该使用 RandomAccessFile,它支持按位置搜索和写入。此外,我认为将 Java 中的 IO 描述为缓慢是不准确的,如果您正确使用 java.io,通常您可以实现类似 C 的性能。
-1赞
mubeen
5/19/2016
#2
您可以使用 Java 8 Stream 功能部件
Stream<String> lines = Files.lines(Paths.get(args[1]));
但是,如果您没有使用 Java-8。您使用包java.nio
如果我以块形式读取数据,块的合适大小是多少?
只能使用 1 KB 的缓冲区大小。
评论
0赞
user207421
11/15/2023
图像没有线条,问题陈述需要随机访问。
-1赞
smgcuv587
11/15/2023
#3
试试这个:
//readfile(byte stream)
InputStream in = new FileInputStream("d:\\1.txt");
//output file
OutputStream out = new FileOutputStream("d:\\2.txt");
//read data
//how many bytes read in once
byte[] bytes = new byte[2048];
//receive data (n represents relative data,in this case, it's numeric )
int n = -1;
//loop get data
while ((n = in.read(bytes,0,bytes.length)) != -1) {
//transform to string
String str = new String(bytes,0,n,"GBK"); # byte->string
System.out.println(str);
//write data
out.write(bytes, 0, n);
}
//close stream
in.close();
out.close();
评论
1赞
user207421
11/15/2023
没有回答问题。
上一个:在 java 中 Files IO 的最佳方式是什么
下一个:IO 大小与块大小?
评论