نوع ذخیره سازی اعدادتون می خواید چه شکلی باشه؟ مثلا به صورت text ذخیره باشه یا به صورت binary ؟
اگه به صورت binary باشه، ذخیره سازی و خوندش هم راحت تره.
پیشنهاد من برای ساختن یه فایل یک گیگی این کده:
public class Main
{
public static void main(String[] args) throws IOException
{
final int FILE_SIZE = (1024 * 1024 * 1024 * 1);
final String FILE_NAME = "temp";
Random random = new Random();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(FILE_NAME));
for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
stream.writeInt(random.nextInt());
}
stream.close();
}
}
و برای sort کردن هم از این کد استفاده کنید:
public class Main
{
public static void main(String[] args) throws IOException
{
final int FILE_SIZE = (1024 * 1024 * 1024 * 1);
final String FILE_NAME = "temp";
DataInputStream inStream = new DataInputStream(new FileInputStream(FILE_NAME));
int[] array = new int[FILE_SIZE / 4];
for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
array[i] = inStream.readInt(1000);
}
Arrays.sort(array);
inStream.close();
DataOutputStream outStream = new DataOutputStream(new FileOutputStream(FILE_NAME + ".sorted"));
for (int i = 0; i < FILE_SIZE / 4; i += 1)
{
outStream.writeInt(array[i]);
}
outStream.close();
}
}
یکم جمع و جور تر با استفاده از تابع:
package respiler;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
public class Main
{
public static void writeIntArray(String name, int[] array) throws IOException
{
DataOutputStream outStream = new DataOutputStream(new FileOutputStream(name));
for (int i = 0; i < array.length; i += 1)
{
outStream.writeInt(array[i]);
}
outStream.close();
}
public static void readIntArray(String name, int[] array) throws IOException
{
DataInputStream inStream = new DataInputStream(new FileInputStream(name));
for (int i = 0; i < array.length; i += 1)
{
array[i] = inStream.readInt();
}
inStream.close();
}
public static int[] randomArray(int size, int max)
{
int[] result = new int[size];
Random random = new Random();
for (int i = 0; i < result.length; i += 1)
{
result[i] = random.nextInt(max);
}
return result;
}
public static final int data_size = (1024 * 1024 * 1024 * 1); // 1GB
public static final String file_name = "temp";
public static void main(String[] args) throws IOException
{
boolean generateFile = true;
if (generateFile)
{
int[] array = randomArray(data_size / 4, 1000);
writeIntArray(file_name, array);
}
else
{
int[] array = new int[data_size / 4];
readIntArray(file_name, array);
Arrays.sort(array);
writeIntArray(file_name + ".sorted", array);
}
}
}