安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml

时间:2022-10-17 17:26:54
    自己的Java基础太差了,学了差不多两年,到3.6号突然顿悟了 构造方法的用法,可见自己的愚钝与贪玩,现在Andorid行情也不是很好,压力很大呀,自己也是那么的菜,那么,重新开始学一遍把,话不多说开始了。

栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
我们先看一张图!!
安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml

下面我们用Android Studio工具用dom方式解析 xml
一.先在java\ Main目录下创建一个assets文件。里面创建一个xml格式的文件
二.编写xml数据

安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml

xml数据

<?xml version="1.0" encoding="UTF-8"?>
<gen>
<layer>
<type>类型</type>
<size>占用空间</size>
<value>取值范围</value>
</layer>
<layer>
<type>byte(字节型)</type>
<size>1字节</size>
<value>—128~127</value>
</layer>
<layer>
<type>shrot(短整形)</type>
<size>2字节</size>
<value>-2^16~2^16-1</value>
</layer>
<layer>
<type>int(整形)</type>
<size>4字节</size>
<value>-2^31~23^`-1</value>
</layer>
<layer>
<type>long(长整型</type>
<size>8字节</size>
<value>-9223372036854775808~9223372036854775807</value>
</layer>
<layer>
<type>float(浮点型)</type>
<size>4字节</size>
<value>-3.4028235*10……38~3.405825*10……38-1</value>
</layer>
<layer>
<type>double(双精度)</type>
<size>8字节</size>
<size>-1.797696*10……308~1.79769313*10^308</size>
</layer>
<layer>
<type>char</type>
<size>1字节</size>
<value>0~65535</value>
</layer>
<layer>
<type>boolean(布尔型)</type>
<size>1或者4字节</size>
<value>false | true </value>
</layer>

</gen>

三.开始解析
1.先创建一个实体类和和xml里要解析的数据名字一致
public class BasicData {

    private String type;
private String size;
private String value;

@Override
public String toString() {
return "BasicData{" +
"type='" + type + '\'' +
", size='" + size + '\'' +
", value='" + value + '\'' +
'}';
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getSize() {
return size;
}

public void setSize(String size) {
this.size = size;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

}

2.创建一个解析dom的接口方便调用


public interface BookParser {
/**
* 解析输入流 得到Book对象集合
* @param is
* @return
* @throws Exception
*/

public List<BasicData> parse(InputStream is) throws Exception;



}

3.解析xml

public class domResolveXML implements BookParser {

@Override
public List<BasicData> parse(InputStream is) throws Exception {
List<BasicData> books = new ArrayList<BasicData>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //取得DocumentBuilderFactory实例
DocumentBuilder builder = factory.newDocumentBuilder(); //从factory获取DocumentBuilder实例
Document doc = builder.parse(is); //解析输入流 得到Document实例
Element rootElement = doc.getDocumentElement();
NodeList items = rootElement.getElementsByTagName("layer");
for (int i = 0; i < items.getLength(); i++) {
BasicData book = new BasicData();
Node item = items.item(i);
NodeList properties = item.getChildNodes();
for (int j = 0; j < properties.getLength(); j++) {
Node property = properties.item(j);
String nodeName = property.getNodeName();
if (nodeName.equals("type")) {
book.setType(property.getFirstChild().getNodeValue());
} else if (nodeName.equals("size")) {
book.setSize(property.getFirstChild().getNodeValue());
} else if (nodeName.equals("value")) {
book.setValue(property.getFirstChild().getNodeValue());
}
}
books.add(book);
}
return books;
}
}

4.在Activity中打印输出

public class MainActivity extends AppCompatActivity {

private BookParser parser;

private List<BasicData> basicDatas;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();


}



/**
* 获得xml数据
*/

public void getData(){
try {
basicDatas = new ArrayList<>();
// 通过assertmanager的open方法获取到beauties.xml文件的输入流
// InputStream is = this.getClass().getClassLoader().getResourceAsStream("basic_data.xml");

InputStream is = getAssets().open("basic_data.xml");
// 初始化自定义的实现类BeautyParserImpl

parser = new domResolveXML(); //创建SaxBookParser实例
basicDatas = parser.parse(is); //解析输入流

for (BasicData book : basicDatas) {
Log.i("MAin", book.toString());
}
} catch (Exception e) {
e.printStackTrace();
}

}

我们放出一张解析完之后的图,看看到底解析成功没有
安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml

我们做成表格的形式来展示数据更美观,用到Listview
下面放出效果图:

安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml