У меня есть задание, что мне нужно создать трехмерный массив произвольного размера, записать его в двоичный файл, затем прочитать двоичный файл обратно в программу и создать другой трехмерный массив, такой же, как первый. У меня проблемы с чтением обратно в программу, после нескольких часов я могу получить только первый int или последний из предыдущего массива. Я еще не успел пройти первые 2D, поэтому я просто выделил место для работы массива, но как только получу, это должно произойти быстро. Метод readData () - тот, который доставляет мне проблемы. Заранее спасибо.
import java.io.*;
import java.util.*;
public class homework1 {
public homework1() {
}
// Allocates space for the 3-dimension array as specified and for each
// array element, assigns a random number, and return the array
public static int[][][] createData() {
int[][][] data;
//Random variables for array dimensions
Random rand = new Random();
int x = rand.nextInt(5) + 1;
rand = new Random();
int y = rand.nextInt(5) + 1;
rand = new Random();
int z = rand.nextInt(5) + 1;
data = new int[x][y][z];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
for (int k = 0; k < z; k++) {
rand = new Random();
int r = rand.nextInt(5) + 1;
data[i][j][k] = r;
}
}
}
return data;
}
//Writes the 3-dimension array to file.
public static int[][][] writeData(int[][][] array, String fileName)
throws IOException {
try {
FileOutputStream out = new FileOutputStream(fileName);
DataOutputStream outs = new DataOutputStream(out);
for (int i = 0; i < array.length; i++) {
//outs.writeInt(array[i].length); (maybe?)
for (int j = 0; j < array[i].length; j++) {
//outs.writeInt(array[i][j].length); (maybe?)
for (int k = 0; k < array[i][j].length; k++) {
outs.writeInt(array[i][j][k]);
}
}
}
outs.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return array;
}
public static int[][][] readData(String fileName)
throws FileNotFoundException, IOException {
int[][][] array = new int[3][3][5];
try {
FileInputStream in = new FileInputStream(fileName);
DataInputStream ins = new DataInputStream(in);
int readFrom = ins.readInt(); //read 4 binary byes and
System.out.println("From file");
while (in.read() != -1) {
// poop = ins.readInt();
System.out.println(readFrom);
for (int i = 0; i < array.length; i++) {
//outs.writeInt(array[i].length); (maybe?)
for (int j = 0; j < array[i].length; j++) {
//outs.writeInt(array[i][j].length); (maybe?)
for (int k = 0; k < array[i][j].length; k++) {
array[i][j][k] = readFrom;
}
}
}
System.out.flush();
readFrom=ins.readInt();
}
//save them in an integer
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (EOFException ex){
ex.printStackTrace();
}
System.out.println("Blank array that needs to be filled");
return array;
}
// Displays the array.
public static void printData(int[][][] array) {
for (int i = 0; i < array.length; i++) {
System.out.println("Frame " + i + ":");
for (int j = 0; j < array[i].length; j++) {
for (int k = 0; k < array[i][j].length; k++) {
System.out.print("\t" + array[i][j][k] + " ");
}
System.out.print("\n");
}
}
}
public static void main(String args[]) throws IOException {
// throws FileNotFoundException, IOException {
int data[][][];
data = createData();
printData(data);
writeData(data, "data.out");
data = readData("data.out");
printData(data);
}
}