我正在尝试使用给定的标头编写读取和写入函数的 java 二进制 I/O。我得到了读取功能,但这里是写入功能的规范。
现在,使用DataOutputStream
Java 标准库中的类,完成 write 方法,以便将指定的值写入ArrayList<Object>
文件。该列表应该只包含Integer
和Double
对象 - 如果您遇到任何其他类型的对象,您应该抛出一个IllegalArgumentException
(Java 标准库异常)。此外,应该只存在格式良好的Integer
组Double
,即一个Integer
对象指定后面有多少Double
对象。如果你有缺失或额外的Double
值,你也应该抛出一个IllegalArgumentException
. 您可以使用经过良好测试的读取方法来测试您的写入方法,并查看您是否获得了预期的结果。您可以通过构造来测试抛出 IllegalArgumentExceptions 的逻辑ArrayList<Object>
具有意外类型或格式错误的 int-double 组的列表。
这是代码....
import java.io.*;
import java.util.ArrayList;
public class BinaryReader
{
private String filename;
private ArrayList<Object> list;
public static ArrayList<Object> read(String fileName)
{
FileInputStream in = null;
ArrayList<Object> list = new ArrayList<Object>();
try
{
in = new FileInputStream(fileName);
}
catch(FileNotFoundException e)
{
System.out.println("File not found");
}
DataInputStream data = new DataInputStream(in);
boolean read = true;
int number = 0;
double dbl = 0;
while(read)
{
try
{
number = data.readInt();
}
catch(EOFException e)
{
System.out.println("Caught end of file exception");
break;
}
catch(IOException e)
{
System.out.println("Caught");
}
list.add(number);
for(int i = 0; i < number; i++)
{
try
{
dbl = data.readDouble();
}
catch(EOFException e)
{
System.out.println("Caught");
}
catch(IOException e)
{
System.out.println("Caught");
}
list.add(dbl);
}
}
return list;
}
public static void write(String fileName, ArrayList<Object> list)
{
FileOutputStream out = null;
try
{
out = new FileOutputStream(fileName);
}
catch(FileNotFoundException e)
{
System.out.println("file not found");
}
DataOutputStream data = new DataOutputStream(out);
//int count = 0;
try
{//PROBLEM AREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
for(int i = 0; i < list.size(); i++)
{
data.writeInt((Integer)list.get(i));
for(int j = 0; j < list.size(); j++)
{
data.writeDouble((Double)list.get(i));
}
}
}
catch(IOException e)
{
System.out.println("Caught");
}
}
}