相关疑难解决方法(0)

Java NIO FileChannel与FileOutputstream的性能/实用性

我试图弄清楚当我们使用nio FileChannel与普通FileInputStream/FileOuputStream文件读取和写入文件系统时,性能(或优势)是否有任何差异.我观察到,在我的机器上,两者都在同一级别执行,也很多次FileChannel都是慢一些.我可以了解比较这两种方法的更多细节.这是我使用的代码,我正在测试的文件是350MB.如果我不是在查看随机访问或其他此类高级功能,那么对文件I/O使用基于NIO的类是一个不错的选择吗?

package trialjavaprograms;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class JavaNIOTest {
    public static void main(String[] args) throws Exception {
        useNormalIO();
        useFileChannel();
    }

    private static void useNormalIO() throws Exception {
        File file = new File("/home/developer/test.iso");
        File oFile = new File("/home/developer/test2");

        long time1 = System.currentTimeMillis();
        InputStream is = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(oFile);
        byte[] buf = new byte[64 * 1024];
        int len = 0; …
Run Code Online (Sandbox Code Playgroud)

java optimization operations nio file

165
推荐指数
4
解决办法
11万
查看次数

用Java打开一个大文件非常慢

我有一个大的(12GB)文件,我需要使用Java从中提取小块数据(每个几千字节).一旦文件打开,寻找和读取数据的速度非常快,但打开文件本身需要长时间 - 大约90秒.有没有办法加快Java中的打开文件操作?

为了澄清,我尝试了以下选项来打开和读取文件:

new FileInputStream(file); 
new RandomAccessFile(file, "r");
Files.newByteChannel(path, StandardOpenOption.READ);
Run Code Online (Sandbox Code Playgroud)

其中每一个都产生了类似的结果.

java file-io nio large-files

13
推荐指数
1
解决办法
1235
查看次数

读取和处理25GB的大文本文件

我必须阅读25 GB的大文本文件,并且需要在15-20分钟内处理此文件.此文件将具有多个页眉和页脚部分.

我尝试使用CSplit根据标题分割这个文件,但它需要大约24到25分钟才能根据标题将其拆分为多个文件,这根本不可接受.

我试过连续读取和写入使用BufferReaderBufferWiter沿FileReaderFileWriter.这需要超过27分钟.再说一遍,这是不可接受的.

我尝试了另一种方法,比如获取每个头的起始索引,然后运行多个线程,通过使用从特定位置读取文件RandomAccessFile.但是没有运气.

我怎样才能达到我的要求?

可能重复:

用Java读取大文件

java file-io file large-files

10
推荐指数
2
解决办法
3万
查看次数

BufferedReader的低性能

我正在逐行处理一些文本文件BufferReader.readlLine().

两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.

我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.

所以我的问题是:

  1. 这种行为是因为寻求缓冲区读取器的时间(我想知道如何BufferedReader逐行工作或解析文件?)

  2. 有没有什么方法可以更快地逐行读取文件?

好的朋友,我提供更多细节.

我正在使用正则表达式将该行拆分为三个部分,然后使用SimpleUnsortedWriter(由Cassandra提供)我将其作为键,列和值写入某个文件.处理完16MB数据后,它会刷新到磁盘.

但是处理逻辑对于所有文件都是相同的,甚至一个大小为330MB的文件,但是在30秒内没有大约100万行的处理逻辑.可能是什么原因?

deviceWriter = new SSTableSimpleUnsortedWriter(
        directory,
        keyspace,
        "Devices",
        UTF8Type.instance,
        null,
        16);

Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)          
{
    //split the line i n row column and value
    long timestamp = System.currentTimeMillis() * 1000;
    deviceWriter .newRow(bytes(rowKey));
    deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);

}
Run Code Online (Sandbox Code Playgroud)

已经改变了,-Xmx256M to -Xmx 1024M但无论如何都没有帮助.

更新: 根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间.(这是我的猜测)

请回复.

java text-processing readline seek bufferedreader

6
推荐指数
1
解决办法
4982
查看次数

JVM可以处理的最大文件大小是多少?

我想知道Java代码可以读取的最大文件大小吗?

我想处理100mb的文件。这可能吗?

如果可能,我必须要做的JVM初始设置是什么?

请推荐一些处理文件的最佳做法。如使用ObjectInputStream,FilterInputStream等。使用字节数组存储文件内容等

java file-io

5
推荐指数
1
解决办法
2万
查看次数

什么是每行读取线路的最快方式

我有一个巨大的文件与字符串.所有行都应该添加到我的代码中的List中.什么是最快的方式?我发现了这个,但我不知道如何使用它来读取每行的行数.

java io performance list

3
推荐指数
1
解决办法
293
查看次数

Java 8 zip 文件 > 4 GB 。ZipException:无效的 CEN 标头(签名错误)

1.8.0_60我在zipfile>上使用 java 时遇到此错误4 GB

我发现通过 zip64 应该可以实现。

ZipFile zipFile = new ZipFile(zippedFile);
Run Code Online (Sandbox Code Playgroud)

错误 :

java.util.zip.ZipException: invalid CEN header (bad signature)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:219)
Run Code Online (Sandbox Code Playgroud)

我应该以另一种方式获取条目以使用 zip64 吗?

java zip

1
推荐指数
1
解决办法
4517
查看次数