Tôi có một tập tin, trong đó bao gồm một hàng:Sắp xếp một tập tin rất lớn trong Java
1 , 1 2 , 1 3 6 , 4 ,...
Trong đại diện này, không gian tách các số nguyên và dấu phẩy. Chuỗi này quá lớn đến nỗi tôi không thể đọc nó với RandomAccessFile.readLine() (gần 4 Gb cần thiết). Vì vậy mà tôi tạo ra một bộ đệm, có thể chứa 10 số nguyên. Nhiệm vụ của tôi là sắp xếp tất cả các số nguyên trong chuỗi.
Bạn có thể, vui lòng trợ giúp?
EDIT
@ Oscar Reyes
tôi cần phải viết một số chuỗi các số nguyên vào một tập tin và sau đó đọc từ nó. Thực ra tôi không biết, làm thế nào để làm điều đó. Tôi là một người mới. Vì vậy, tôi quyết định sử dụng ký tự để viết số nguyên, dấu phân cách giữa các số nguyên là "," và dấu phân cách giữa các chuỗi là "\ n \ r". Vì vậy mà tôi tạo ra một con quái vật mà đọc nó:
public BinaryRow getFilledBuffer(String filePath, long offset) throws IOException{
mainFile = new RandomAccessFile(filePath, "r");
if (mainFile.length() == 0){
return new BinaryRow();
}
StringBuilder str = new StringBuilder();
mainFile.seek(mainFile.length()-4); //that is "\n" symbol
char chN = mainFile.readChar();
mainFile.seek(offset);
int i = 0;
char nextChar = mainFile.readChar();
while (i < 11 && nextChar != chN){
str.append(nextChar);
if (nextChar == ','){
i++;
if (i == 10){
break;
}
}
nextChar = mainFile.readChar();
}
if (nextChar == chN){
position = -1;
}else{
position = mainFile.getFilePointer();
}
BinaryRow br = new BinaryRow();
StringBuilder temp = new StringBuilder();
for (int j = 0; j < str.length(); j++){
if ((str.charAt(j) != ',')){
temp.append(str.charAt(j));
if (j == str.length() - 1){
br.add(Integer.parseInt(temp.toString()));
}
}else{
br.add(Integer.parseInt(temp.toString()));
temp.delete(0, temp.length());
}
}
mainFile.close();
return br;
}
Nếu bạn có thể tư vấn cho làm thế nào để làm điều đó, xin vui lòng làm điều đó =)
Sự cố với mã của bạn ở đâu? Bạn đã thử phương pháp gì? –
có, để viết các số nguyên này vào một tệp tôi đã sử dụng RandomAccessFile.writeChars(). Tôi đã cố gắng để sử dụng writeInt() nhưng số nguyên gắn bó với nhau ... Vì vậy, writeChars() đã viết số nguyên theo cách đó, tôi chỉ thêm dấu phẩy ... – Dmitry
@ Dmitry: có gì sai với việc có số '136' với nhau, tại sao bạn cần nó như '1 3 6'? – OscarRyz