【问题标题】:Switching between file paths in Java [closed]在Java中的文件路径之间切换[关闭]
【发布时间】:2018-09-24 15:04:19
【问题描述】:

我正在为外部排序编写一个合并排序,它一次从文件 A 中读取 2 块数据,将它们合并成一个更大的块,然后将其写入文件 B。之后,我需要读取 2从文件 B 一次将这些增加的块中的一个,将它们合并为 1 个更大的块,并将其写入文件 A。这种切换一直持续到最后所有数据都计为 1 个块。

我尝试在每次迭代后像这样交换标识符:

RandomAccessFile temp = fileA;
    fileA = fileB;
    fileB = temp;

这要求我使用新的文件目录名称更新 BufferedInput 和 BufferedOutputStreams 并每次都构造它们。

我的 RAM 数量有限,因此除非必须,否则我无法继续创建新对象。每次迭代是否有更好的方法来切换目标文件和源文件?

【问题讨论】:

  • 这样不行吗?您对“更好”的衡量标准是什么?
  • 你在使用线程吗?
  • 它确实有效,但我需要在每次迭代时运行流构造函数。更好的是不依赖于垃圾收集器收集运行构造函数后留下的无标识符流对象。我也不使用线程,应该吗?我还在学习Java,如果我有任何不正确的地方,我真的很抱歉。

标签: java filestream mergesort external-sorting


【解决方案1】:

一个简单的通用Swapable 类应该允许您在两个对象之间进行交换。

class Swapable<T> {
    final T a;
    final T b;
    boolean useA = true;

    Swapable(T a, T b) {
        this.a = a;
        this.b = b;
    }

    T get() {
        return useA ? a : b;
    }

    void swap() {
        useA = !useA;
    }
}

创建两个RandomAccessFiles 并将它们安装在Swapable 中。使用get 方法获取当前文件。使用swap方法在它们之间切换。

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多