我无法弄清楚(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);
}
答案 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;
}
}