1

我有两个类 A 和 B。我想从 B 访问 A 中的数组列表。数组列表属于 C 类类型,用于存储对象(数据包)。我想知道是否有任何方法可以遍历列表并从每个数据包中获取特定数据。

public class PcapStream
{
  PcapParser objPcapParser = new PcapParser();
  PcapDef numPackets = new PcapDef();
  int listSize = numPackets.getMaxPackets();

  public void findStream()
  {
    final ListIterator<PcapDef> packetIterator = objPcapParser.packet_list.listIterator();
    while(packetIterator.hasNext())
    {
      for(final int i=0; i<=listSize;i++)
      {

我从这样的事情开始。不确定它是如何工作的。B类是PcapStream,A类是PcapParser,C类是PcapDef

ListIterator packetIterator = objPcapParser.packet_list.listIterator();
    while(packetIterator.hasNext())
    {
      for(int i=0; i<listSize; i++ )
      {
        PcapDef packet1 = (PcapDef) packetIterator.next();
        PcapDef packet2 = packetIterator; //here I would like to get the 2nd object from the list, not sure how to get that at this point.
      }
}
public int compare(final PcapDef packet1, final PcapDef packet2)
  {

   return 0; 
  }

我还在努力。在这一点上,这就是我所拥有的

    public void findStream()
      {
          try
          {
            for(int i=0;i<listSize;i++)
            {
              final List <PcapDef> list = new ArrayList<PcapDef>();
              final PcapDef packet1 = objPcapParser.packet_list.get(i);
              checkPackets(packet1, list, i);
            }
          }
          catch(final IndexOutOfBoundsException e)
          {
            System.out.println("Exception : " + e);
          }
        final Set packetSet = Stream.entrySet();
        final Iterator setIterator = packetSet.iterator();
        while(setIterator.hasNext())
        {
          final Map.Entry packetEntry = (Map.Entry) setIterator.next();
          System.out.print(packetEntry.getKey() + ": ");
          System.out.println(packetEntry.getValue());
        }
      }

      private void checkPackets(final PcapDef packet1, final List<PcapDef> list, final int i)
      {
        for(int j=1;j<listSize && j!=i;j++)
        {
          final PcapDef packet2 = objPcapParser.packet_list.get(j);
          final int value = compare(packet1,packet2);
          if(value == 0)
          {
            list.add(packet1);
list.add(packet2);
            checkPackets(packet2, list, i);
          }
          else
          {
            Stream.put(i,list); //add list to hashmap
          }
        }

      }

      @Override
      public int compare(final PcapDef packet1, final PcapDef packet2)
      {
        final String header1 = packet1.getHeader();
        final String header2 = packet2.getHeader();
        final String src_port1 = packet1.getSrc_port();
        final String dst_port2 = packet2.getDst_port();
final String src_port2 = packet2.getSrc_port();
        final String dst_port1 = packet1.getDst_port();
        System.out.println(header1 + header2);
        int flag = 1;
        try{
          if(header1.equalsIgnoreCase(header2))
          {
            if((src_port1.substring(10).equalsIgnoreCase(dst_port2.substring(10))) && (src_port2.substring(10).equalsIgnoreCase(dst_port1.substring(10)) )
            {
              flag = 0;
              return flag;
            }
          }
        }

@Andy这是我到目前为止写的。我面临的问题:正在生成重复项并且哈希图条目不连续,我的意思是索引 0,1,2 .. 而很少有位置是空的。因此,如果我将非常大的文件作为程序的输入,它会给我一个 indexoutofboundsexception。我是一个初学者,并尽我所能。请帮忙。

4

1 回答 1

0

您可以使用该Iterator.next()方法获取下一个列表成员。每次调用 next() 都会前进到下一个列表成员。

while(packetIterator.hasNext())
{
  PCapDef packet = packetIterator.next();
  ...
}

编辑:

您可以使用该Iterator.get(int)方法通过索引获取列表成员。

while(packetIterator.hasNext())
{
  PCapDef packet = packetIterator.next();

  for(int i=0; i<listSize; i++ )
  {
    PcapDef packet2 = objPcapParser.packet_list.get( i )
    ...
  }    
}
于 2013-06-17T22:05:33.413 回答