自己的Java基础太差了,学了差不多两年,到3.6号突然顿悟了 构造方法的用法,可见自己的愚钝与贪玩,现在Andorid行情也不是很好,压力很大呀,自己也是那么的菜,那么,重新开始学一遍把,话不多说开始了。
栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
我们先看一张图!!
下面我们用Android Studio工具用dom方式解析 xml
一.先在java\ Main目录下创建一个assets文件。里面创建一个xml格式的文件
二.编写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();
}
}
我们放出一张解析完之后的图,看看到底解析成功没有
我们做成表格的形式来展示数据更美观,用到Listview
下面放出效果图: