Mam plik, który składa się z jednego rzędu:Sortowanie ogromny plik w Javie
1 , 1 2 , 1 3 6 , 4 ,...
W tej reprezentacji, obowiązuje całkowite oddzielenie i przecinki. Ten ciąg jest tak duży, że nie mogę go odczytać za pomocą funkcji RandomAccessFile.readLine() (wymagane prawie 4 GB). Tak więc stworzyłem bufor, który może zawierać 10 liczb całkowitych. Moim zadaniem jest posortowanie wszystkich liczb całkowitych w ciągu znaków.
Czy mógłbyś, proszę, pomóc?
EDIT
@Oscar Reyes
muszę napisać kilka sekwencje liczb do pliku, a następnie odczytać z niego. Właściwie to nie wiem, jak to zrobić. Jestem nowicjuszem. Postanowiłem więc użyć znaków do zapisania liczb całkowitych, ograniczniki między liczbami całkowitymi to ",", a delimetry między sekwencjami to "\ n \ r", które. Tak, że stworzył potwora, który brzmi ona:
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;
}
Jeśli mógłbyś doradzić jak to zrobić, zrób to =)
Gdzie jest problem z kodem? Jakie podejścia próbowaliście? –
tak, aby zapisać te liczby całkowite do pliku użyłem RandomAccessFile.writeChars(). Próbowałem użyć writeInt(), ale liczby całkowite sklejone ... Więc writeChars() zapisał liczby całkowite w ten sposób, dodałem tylko przecinek ... – Dmitry
@Dmitry: co jest złego w posiadaniu numeru '136' razem, dlaczego ty potrzebujesz go jako "1 3 6"? – OscarRyz