我想从大txt文件中删除重复数字,其中第一行是该行中已排序数字的数量,但内存限制为20 mb。我阅读了文章How to Read a Large File,并尝试使用BufferedWriter,但是该过程需要20 mb以上的内存。 请帮助我。
import java.io.*;
import java.util.Scanner;
public class DeleteRepeatingNumbers {
public static void main(String[] args) throws IOException {
try (Scanner sc = new Scanner(
new FileInputStream("input.txt"), "UTF-8");
Writer writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("output.txt"), "utf-8"))) {
int n = sc.nextInt();
int prevInt = 0;
if (n != 0) {
prevInt = sc.nextInt();
writer.write(String.valueOf(prevInt));
}
for (int i = 0; i < n - 1; i++) {
int next = sc.nextInt();
if (next != prevInt) {
writer.write(System.getProperty("line.separator"));
writer.write(String.valueOf(next));
prevInt = next;
}
}
}
}
}
示例:
21
2
4
8
8
8
9
11
11
11
11
11
11
13
14
15
16
222
222
222
222
222
答案 0 :(得分:1)
我不确定20mb是否足以启动JVM,但是从程序角度来看,我们可以使用这些方法来减少内存占用。
这个问题可以有两种解决方法:
希望这会有所帮助。
答案 1 :(得分:1)
如果您能向我展示您的资源,我会更有效地帮助您。但是我认为您可以先尝试一下。
ChartYAxis *leftAxis = _chartView_fairway_hit.leftAxis;
leftAxis.labelFont = [UIFont systemFontOfSize:10.f];
leftAxis.labelCount = 5;
// leftAxis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:leftAxisFormatter];
leftAxis.labelPosition = YAxisLabelPositionOutsideChart;
leftAxis.spaceTop = 0.25;
leftAxis.axisMinimum = 0;
leftAxis.axisMaximum = 100;
我希望这会有用。