簡體   English   中英

實現二進制I / O的寫方法

[英]implementing a write method for binary I/O

我正在嘗試做Java二進制I / O,在其中我編寫了具有給定標頭的讀取和寫入功能。 我可以使用讀取功能,但這是寫入功能的規格。

現在,使用Java標准庫中的DataOutputStream類,完成write方法,以便它將指定ArrayList<Object>的值寫入文件。 該列表應僅包含IntegerDouble對象-如果遇到任何其他類型的對象,則應引發IllegalArgumentException (Java標准庫異常)。 另外,應該只存在格式良好的Integer - Double組,即,一個Integer對象,指定跟隨多少個Double對象。 如果缺少或有多余的Double值,則還應該拋出IllegalArgumentException 您可以通過使用經過良好測試的讀取方法並查看是否獲得預期的結果來測試寫入方法。 您可以通過構造具有意外類型或格式不正確的int-double組的ArrayList<Object>列表來測試引發IllegalArgumentExceptions的邏輯。

這是代碼...

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");
      }


   }
}

可以通過使用instanceof來檢查無效對象:

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

對於整數雙對檢查,一旦獲得整數,就將其值視為預期計數,然后獲得實際計數,在隨后的迭代中再次遇到整數之前,請繼續增加實際計數,當再次遇到整數時,請檢查實際計數是否==預期如果不計數,則拋出異常,否則使用新的Integer值重新初始化ExpectedCount。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM