0

指定されたヘッダーを使用して読み取りおよび書き込み関数を書き込む Java バイナリ I/O を実行しようとしています。読み取り機能は動作するようになりましたが、書き込み機能の仕様は次のとおりです。

ここDataOutputStreamで、Java 標準ライブラリのクラスを使用して、write メソッドを完成させ、指定された の値をファイルに書き込みArrayList<Object>ます。リストにはオブジェクトのみを含める必要がIntegerありDoubleます。他のタイプのオブジェクトに遭遇した場合は、IllegalArgumentException(Java 標準ライブラリの例外) をスローする必要があります。さらに、整形式のグループ、つまり、いくつのオブジェクトが続くかを指定する 1 つのオブジェクトのみが存在する必要IntegerDoubleあり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");
      }


   }
}
4

1 に答える 1

0

instanceof を使用して、無効なオブジェクトをチェックできます。

if((!(list.get(i) instanceof Integer) || !(list.get(i) instanceof Double)){
  throw new IllegalArgumentException("Only integer and Double Allowed");
}

integer-doubleペアのチェックでは、Integerを取得したら、その値を期待されるカウントとして扱い、実際のカウントを取得します。次の反復で、Integerに再び遭遇する前に、実際のカウントを増やし続けます.Integerに再び遭遇すると、acutal count == expectedそうでない場合はカウントし、例外をスローします。そうでない場合は、expectedCount を新しい整数値で再初期化します。

于 2012-05-30T03:28:57.873 に答える