büyük bir dosya sıralama ben bir satırda oluşan bir dosya vardır:Java
1 , 1 2 , 1 3 6 , 4 ,...
Bu gösterimde, boşluk tamsayılar ve virgül ayırın. Bu dize ben RandomAccessFile.readLine ile okuyamaz o kadar büyüktür ki() (neredeyse 4 Gb tabi). Böylece 10 tamsayı içeren bir arabellek yarattım. Görevim dizedeki tüm tam sayıları sıralamak. Eğer,
yardım eder misiniz?
DÜZENLEME
@Oscar Reyes
Ben bir dosyaya tamsayılar bazı dizileri yazmaya gerek ve sonra ondan okumak için. Aslında bilmiyorum, nasıl yapılacağını. Ben yeni biriyim. Bu yüzden tamsayı yazmak için chars kullanmaya karar verdim, tamsayılar arasındaki sınırlayıcılar "," ve diziler arasındaki sınırlayıcılar "\ n \ r" dir. bunu yapmak için nasıl tavsiyelerde olsaydı
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;
}
, bunu lütfen =)
Kodunuzdaki sorun nerede? Hangi yaklaşımları denediniz? –
evet, bu tam sayıları bir dosyaya yazmak için RandomAccessFile.writeChars() kullanılır. WriteInt() kullanmayı denedim ama integer'leri birbirine yapıştı ... Yani writeChars() bu şekilde tamsayılar yazdım, sadece virgül ekledim ... – Dmitry
@Dmitry: niçin '136' sayısıyla birlikte olmanın nesi var? '1 3 6' olarak mı ihtiyacınız var? – OscarRyz