美文网首页java
堆,栈内存分析

堆,栈内存分析

作者: _narcissus | 来源:发表于2018-12-05 22:00 被阅读13次
  • 这是一个数据流,将李白这个对象写入到文件中。
package fileOperatiion.fileSerializable;

import java.io.*;

public class WriteWithSerialize {
    public static void main(String[] args) {
        StudenInfo stu=new StudenInfo();
        stu.setName("李白");
        stu.setAge(18);
        stu.setGender("男");

        File file=new File("/home/narcissus/Desktop/studentinfo");

        FileOutputStream fs= null;
        ObjectOutputStream oos=null;
        try {
            file.createNewFile();
            fs = new FileOutputStream(file);
            oos= new ObjectOutputStream(fs);
            oos.writeObject(stu);
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try {
                if(oos!=null){
                    oos.close();
                }
                if(fs!=null){
                    oos.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

整个抄写下来也是懵的,不知道是啥意思,为什么是这样写的。然后也是找了许多资料才明白了一丢丢:)
看下图:


内存分析
  • 内存分析是很重要的。

    StudenInfo stu = new StudenInfo();
    

    这句话做了啥呢?三件事

    • 1变量stu前面的不仅仅可以放数据类型(int ,string等),还可以放类,对象等。其实是在栈中声明了一个局部变量,这个变量是对前面的引用。比如这里就是定义了一个stu的变量,这个变量是对StudenInfo类的引用。
    • 2 new StudenInfo 在堆中创建了一个StudentInfo类的对象。
    • 3 将创建的对象地址给到变量stu。

    然后下面的这段也就不那么难理解了,只不过是把这些拆开了写,目的是什么呢?因为作用域的关系,为了后面写close()方法,所以只能把初始化变量和实例化对象分开写。

      FileOutputStream fs= null; //变量fs对类的引用,并赋初值。
      ObjectOutputStream oos=null;
      try {
          file.createNewFile();
          fs = new FileOutputStream(file);  //实例化对象,并将地址给到变量fs
          oos= new ObjectOutputStream(fs);
          oos.writeObject(stu);  //oos的地址是对象ObjeOutpuStream,这里调用对象的writeObject()方法。
      } catch (Exception e) {
          e.printStackTrace();
      }
    

然后是读文件操作

package fileOperatiion.fileSerializable;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class ReadWithSerialize {
    public static void main(String[] args){
        File file =new File("/home/narcissus/Desktop/studentinfo");
        FileInputStream fis=null;
        ObjectInputStream ois=null;
        try{
            fis = new FileInputStream(file);
            ois = new ObjectInputStream(fis);
            //怎么读一个Object?
            StudenInfo stu=(StudenInfo)ois.readObject();
            System.out.println(stu.getName()+stu.getAge()+stu.getGender());
           
        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            try {
                if(oos!=null){
                    oos.close();
                }
                if(fs!=null){
                    oos.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

相关文章

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • 堆,栈内存分析

    这是一个数据流,将李白这个对象写入到文件中。 整个抄写下来也是懵的,不知道是啥意思,为什么是这样写的。然后也是找了...

  • Java对象内存分析

    此处对象内存分析只针对Java基本对象,暂不对集合对象进行剖析。 内存 栈内存 堆内存

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • JS中的堆栈问题以及影响

    堆(heap) 堆 是堆内存的简称。一个混沌,杂乱无章,方便存储和开辟内存空间。 栈(stack) 栈 是栈内存的...

  • 2018-01-03三题

    1.堆内存和栈内存的区别是什么? 线程的堆内存空间是共享的,栈内存空间才是独立的(堆共享,栈独立)。 2.wait...

  • Java 工程师成神之路(2018 年修订版)

    基础篇 1.1 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别。 Java内存模型 内存可见性、重排...

网友评论

    本文标题:堆,栈内存分析

    本文链接:https://www.haomeiwen.com/subject/iohgcqtx.html