这个示例代码如何工作? (LL04node)ois.readObject();

时间:2017-10-22 03:48:34

标签: java

我无法弄清楚(LL04node)做了什么以及它如何影响ois.readObject()。这是来自我的数据结构类的示例代码,它讨论了如何将LinkedList数据写入OutputStream文件。我希望有人知识足以帮助我理解这一点。谢谢。

function chart($id){
    $rows = array(); $rows2 = array();
        $data['mikrotik'] = $this->mikrotik_api->interfaces()->ethernet()->get_byname($id);
    if(count(isset($data[0])) > 0 ){
        $rx = number_format($data[0]["rx-bits-per-second"]/1024,1);
        $tx = number_format($data[0]["tx-bits-per-second"]/1024,1);
        $rows['name'] = 'Tx';
        $rows['data'][] = $tx;
        $rows2['name'] = 'Rx';
        $rows2['data'][] = $rx;
    }
    else{
        echo "<font color='#ff0000'>Koneksi gagal</font>";
    }

$result = array();
array_push($result,$rows);
array_push($result,$rows2);
print json_encode($result, JSON_NUMERIC_CHECK);
}

1 个答案:

答案 0 :(得分:0)

我评论了每一行,所以希望你能够理解每一部分。

首先,导入java.io包以使用in和out函数。 详细信息可以在这里找到: https://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html

import java.io.*;
public class LL04fromDisk
{
public static void main(String[] args) throws IOException, ClassNotFoundException
{

类FileInputStream允许您读取文件。通过下面的行,您可以通过打开“linkedListObj.dat”文件来创建FileInputStream,该文件是本地计算机上的实际文件。

有关FileInputStream的详细说明,请访问https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html

        FileInputStream fis = new FileInputStream("linkedListObj.dat");

现在,您拥有系统中的数据。您将创建ObjectInputStream对象。使用它,您实际上可以读取对象。有关ObjectInputStream的详细信息,请访问https://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html

        ObjectInputStream ois = new ObjectInputStream(fis);

您通过调用构造函数创建了一个新的LL04mgr对象。见[1]

        LL04mgr stuListMgr = new LL04mgr();

现在,您有一个名为stuListMgr的新列表的引用。列表的头部为null,因此我调用ois的readObject方法(即ObjectInputStream)设置列表的头部。见[2]

正如您所看到的,在通过调用readObject()ObjectInputStream类读取对象之后,您可以从流中读取对象。使用铸件,您可以获得所需的类型。

在这里(LL04node)是一个转换,以获得所需的类型,LL04node。

        stuListMgr.head = (LL04node)ois.readObject(); //code is here

在列表中设置头部后,在LL04mgr类中调用dispList方法。见[3]

        stuListMgr.dispList();

      }
    }

这是你的另一个名为LL04mgr的类,它是List。

import java.io.*;
class LL04mgr implements Serializable
{

这个类有一个公共字段,称为head。你可以在班级之外得到并设置这个头,因为它是公开的。

  public LL04node head;                          // field

[1]这是你的构造函数。通过调用此方法,您可以初始化新列表。 创建新对象时,请调用... ClassName referenceName = new ConstructorName();

  public LL04mgr()                               // constructor
  {
    head = null;
  }

您可以在列表的前面添加节点。

  public void addNode(int i, String n)
  {

当您调用此行时,您将创建一个新节点,其引用名称为newNode,其id为i(整数类型),name为n(字符串类型),下一个是当前头。

例如,如果有以下列表(id,name):

(101,john) - &gt; (2,sam) - &gt; (72,欢乐)

现任主管是(101,约翰)。

你想插入一个id为62的新节点,名字是java,然后你打电话, (假设您启动了对象(在LL04mgr list = new LL04mgr();)之前

list.addNode(62,java);

然后,您的新链接列表将显示为

(62,java) - &gt; (101,john) - &gt; (2,sam) - &gt; (72,欢乐)

    LL04node newNode = new LL04node(i, n, head);
    head             = newNode;
  }

此方法是从第一个节点打印出每个节点的信息。

  public void dispList()
  {

对于此列表,您不希望丢失对当前头部的引用。所以,你复制头部参考。

LL04node current = head;

使用while循环,您可以从开头(头部)到结尾行进列表。

while(current != null)
  {

使用System.out.printf,以“%3d%-20s \ n”格式打印有关节点的信息。此链接显示printf:https://alvinalexander.com/programming/printf-format-cheat-sheet

的参考
System.out.printf("%3d %-20s\n",current.id, current.name);

通过调用它,可以将指向当前节点的指针移动到下一个节点。

        current = current.next;
      }
  }

这是节点类。列表类有一个头,每个节点都链接在一起。我想如果您观看视频,您将能够轻松理解链接列表的概念。

这是我最喜欢的关于链接列表的视频! https://www.youtube.com/watch?v=njTh_OwMljA

import java.io.*;
public class LL04node implements Serializable
{

如您所见,每个节点有3个字段。它有关于其ID和名称的信息。此外,此节点知道谁是下一个节点。如果此节点是列表中的最后一个节点,则下一个节点将为空。

  public int         id;                            //fields
  public String      name;
  public LL04node    next;

这是此节点类的构造函数。创建节点的对象时,需要调用此构造函数。每个输入都将存储在节点对象中。

  public LL04node(int i, String n, LL04node ptr)    //constructor
  {
    id   = i;
    name = n;
    next = ptr;
  }
}