长期存储数据,即把数据(如内存中的)保存到可永久保存的存储设备中(如硬盘、U盘),也就是人们常说的持久化。
常用持久化的方案有数据库、XML文件和文件存储。
数据库是按照数据结构来存储和管理数据的仓库,后文不再做详细介绍。
XML是可扩展标记语言,最早是为了简化Internet的文档数据传输,它提供统一的语法格式来描述数据的结构,通常XML文件用于一些少量且无特殊类型要求的文本存储。示例代码使用W3C标准的接口生成XML:
importjava.io.FileOutputStream;
importjava.io.PrintWriter;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.transform.OutputKeys;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
publicclass${
publicstaticvoidmain(String[]args)throwsException{
Documentdocument=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
//创建根节点为students的XML文件
Elementstudents=document.createElement("students");
document.appendChild(students);
//在根节点下创建一个子节点学生
Elementstudent=document.createElement("student");
students.appendChild(student);
//创建节点学生姓名,值为张三
Elementname=document.createElement("name");
name.appendChild(document.createTextNode("张三"));
student.appendChild(name);
//创建节点学生年龄,值为18
Elementage=document.createElement("age");
age.appendChild(document.createTextNode("18"));
student.appendChild(age);
//创建节点学生编号,值为150101
Elementnumber=document.createElement("number");
number.appendChild(document.createTextNode("150101"));
student.appendChild(number);
//在根节点下创建第二个子节点学生
student=document.createElement("student");
students.appendChild(student);
//创建节点学生姓名,值为李四
name=document.createElement("name");
name.appendChild(document.createTextNode("李四"));
student.appendChild(name);
//创建节点学生年龄,值为20
age=document.createElement("age");
age.appendChild(document.createTextNode("20"));
student.appendChild(age);
//创建节点学生编号,值为150102
number=document.createElement("number");
number.appendChild(document.createTextNode("150102"));
student.appendChild(number);
//将XML文件保存到硬盘
Transformertransformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"utf-8");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
PrintWriterwriter=newPrintWriter(newFileOutputStream("/home/test.xml"));
transformer.transform(newDOMSource(document),newStreamResult(writer));
}
}
无论是数据库还是XML文件,它们都使用了能让数据快速方便进出的标准规范。其它文件如propeties、json,都可以使用类似XML的方式来打包数据,然后通过Java丰富的io流接口保存到磁盘中。
B. java程序中数据的储存方法有哪些
java程序中数据储存方法如下:
一种是栈内存,另一种是堆内存
(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在函数的栈内存中分配;
(2)堆内存用来存放由new创建的对象和数组以及对象的实例变量(即全局变量)。
在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;
在堆中分配的内存由java虚拟机的自动垃圾回收器来管理
堆和栈的优缺点
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。
缺点就是要在运行时动态分配内存,存取速度较慢;
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。
C. java 怎么把数据存到内存中
这里你采纳与否没关系,给你说说编程与内存的关系。
你定义的任何变量,常量,类,方法等等,其实都在内存中,没有所谓的把数据存内存中,这概念,你可以想一下电脑重启或关机后,内存中的所有数据,都会丢失,除非你保存到磁盘中去。
在内存中的数据有两块,第一、缓冲,一般写数据到磁盘的时候开辟出来的内存空间;第二、缓存,一般是从磁盘读数据到内存中开辟出来的内存空间。会这么使用,原因很简单,磁盘读写数据速度与内存不一致(磁盘的存取效率远远小于内存的存取效率),为了提高数据的存取效率,才会这么干的。
一般而言,java中的所谓数据,大部分都是类,从自动引用计数的概念来分析,你想把对象长久的放在内存中,不会被垃圾回收机制释放,注意制药有一个对象在使用/引用你的数据,这条数据就会存在内存中。所以,想servlet中的全局配置参数,随时可以取到还是唯一一份,你可以参考一下。
另外内存使用分堆与栈,堆在面向对象编程中存储对象的,栈是方法或函数执行的时候临时开辟的存储空间,方法或函数执行完毕就会释放。
希望我的回复能帮助到你,采纳与否没关系。有更好的答案,我就隐藏我的回复。
D. java中一个类的方法是怎么存储的
java内存分析:
都是将内存分为三块
第一块内存区域是:栈
第二块内存区域是:堆
第三块内存区域是:方法区
栈空间里装的都是局部变量
堆空间里装的都是new出来的东西,特殊的对象 (非static修饰的全局变量是特殊的对象,在堆内存区域内)
方法区里装的都是基本类型常量和字符串常量、static修饰的全局变量、代码
E. Java中通过txt文件存储和取出数据
如果是这样的话,你就先用string的split方法以,为分隔符号分开,再replace“”,这两个东东就可以得到你要的中间的数据了。有个缺点比较占用内存,或许你也可以去读文件读到,的时候就将之前的存起来,然后再读下面的东西。思路而已试试看吧~
F. JAVA中类中的方法存储在什么地方
类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。
另参考(他人文章):
如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java 是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在传递给对象参数的时候,Java 编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java 编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用在前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。
G. Java中如何通过txt文件存储和取出数据
Java中读取txt文件可以使用file类先创建一个对象,然后使用I/O操作,进行读取或者写入操作,示例如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class demo2 {
private static String path = "f:/demo1.txt";
private static File file;
static{
file = new File(path);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
Student stu = new Student(1,"张三",90);
writeDataToFile(file,stu);
readDataFromFile(file);
}
private static void readDataFromFile(File file) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String str = "";
while((str = reader.readLine())!=null){
String[] stuInfo = str.split(",");
System.out.println("学号:"+stuInfo[0]+" 姓名:"+stuInfo[1]+" score:"+stuInfo[2]);
}
}
private static void writeDataToFile(File file,Student stu) throws FileNotFoundException {
PrintWriter out = new PrintWriter(new FileOutputStream(file, true));
out.println(stu.toString());
out.close();
}
}
H. java中的对象是怎么存储的
stack 区存放函数参数和局部变量;
heap 区存放对象;
data 区存放static 的变量或者字符串常量;
code 区存放类中的方法;
stack 栈 -->放方法的参数 和局部变量.就像这样
-----------
void test(String[] args){
int xx = 0;// args和 xx在jvm load class时存放在栈中
}
heap 堆 --> 堆要比栈要大得多. 当一个对象对new出来时,该对象放在heap中,对象引用放在栈中.
data区,也就是数据区 -->静态的变量 和 string的常量.
code 代码区 --->classloader类加载器加载该class时存放类中的方法.
I. Java中什么类型存储大量数据
Oracle中 字符 包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2几种类型!java中字符串是对象,是在内存中存储的,不像基本数据类型有各自的长度,字符串应该是只要是内存不满,是没有长度限制的
J. java中,字符串,如何存储在内存中的哪个区域
字符串在java中是不可变序列,每一个双引号的字符串序列都是常量,存在常量池中。但String类型的对象,属于对象范畴,按对象的特性存储。