为了账号安全,请及时绑定邮箱和手机立即绑定

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • RandomAccessFile
    查看全部
  • 序列化中父子类的构造函数的问题:<br>
    1:一个类实现了序列化接口,那么其子类都可以进行序列化<br>
    2:序列化的时候,使用子类创建对象的时候会递归调用父类的构造函数——JAVA是单继承的语言,要先有父再有子
    3:反序列化的时候,对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被递归调用——直接父类和间接父类都是如此的,反之,如果父类实现了序列化的接口,那么子类继承它的属性和方法就可以直接反序列化,就不会调用父类的构造函数了。

    查看全部
  • mkdir创建一个新的文件夹就是目录

    createNewFile创造了一个新的文件

    查看全部
  • arraylist是自己完成序列化的不是用jvm自定义的方式<br>
    因为arraylist有扩容机制 所以里面封装的那个数组可能没有放满<br>
    所以为了减少开销 只序列化有信息的部分


    对于对象中某个属性加上transient关键字可以是起步默认呗自动化,但仍可手动自动化。方法是重写类中的readObject方法与writeObject方法如下:
    private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException{
    s.defaultWriteObject();//把jvm能序列化的元素自动序列化
    s.writeInt(stuAge);//手动将transient元素序列
    private void readObject(java.io.ObjectInputStream s)
    throws java.io.IOException, ClassNotFoundException {
    s.defaultReadObject();
    this.stuAge = s.readInt();
    }
    transient这种做法的作用在于比如说有一个属性是一个数组,但这个数组并没有被占满,未被占满的元素空间就不应该被序列化应该逐个逐个手动序列化,直到将所有被占据的数组空间序列化就结束

    transient关键字
    1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
    2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
    3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
    4)但可以通过writeObject和readObject自己完成序列化和反序列化
    arraylist是自己完成序列化的不是用jvm自定义的方式<br>
    因为arraylist有扩容机制 所以里面封装的那个数组可能没有放满<br>
    所以为了减少开销 只序列化有信息的部分


    对于对象中某个属性加上transient关键字可以是起步默认呗自动化,但仍可手动自动化。方法是重写类中的readObject方法与writeObject方法如下:
    private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException{
    s.defaultWriteObject();//把jvm能序列化的元素自动序列化
    s.writeInt(stuAge);//手动将transient元素序列
    private void readObject(java.io.ObjectInputStream s)
    throws java.io.IOException, ClassNotFoundException {
    s.defaultReadObject();
    this.stuAge = s.readInt();
    }
    transient这种做法的作用在于比如说有一个属性是一个数组,但这个数组并没有被占满,未被占满的元素空间就不应该被序列化应该逐个逐个手动序列化,直到将所有被占据的数组空间序列化就结束

    transient关键字
    1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
    2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
    3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
    4)但可以通过writeObject和readObject自己完成序列化和反序列化

    查看全部
  • 对象必须实现序列化接口

    ObjectOutputStream();

    ObjectInputStream();

    查看全部
  • BufferedReader(),字符流的过滤器

    可以直接读一行,readLine();

    但是不能识别换行

    writer的方法有一个newLine(),写文本的时候用它直接换行

    PrintWriter用起来更方便,new的时候可以直接为文件路劲,stream,wtiter,file

    查看全部
  • InputStreamReader(),
    转换流

    查看全部
  • randAccessFile操作

    查看全部
  • 首先,这是相对与内存的说法.
    读入:将持久化的数据(存储设备,如硬盘)读取到内存中;
    写出:将内存中的数据写到存储设备中(持久化)


    查看全部
  • gbk中 中文占用两个字节 英文占用一个字节; 但是在utf-8中 中文占用3个字节   英文占用1个字节

    java采用的是双字节编码  utf-16 其中的中文占用两个字节,英文也占用两个字节。

    查看全部
    0 采集 收起 来源:文件的编码

    2018-03-28

  • 用IO流将一个文件复制,类似将一缸水放进另一个缸里面

    用FileInputStream的write()方法,一滴一滴的放

    DataInputStream的WriteXxx()方法,一碗一碗 的放

    BufferedOutputStream一碗一碗放入桶中,在集中放入缸中

    别忘了刷新缓冲区flush();

    读或写,三种方法

    直接字节读取最慢

    buffered次之

    批量最快(自己定义缓冲区)


    查看全部
    0 采集 收起 来源:字节缓冲流

    2018-03-26

  • gbk编码 中文(2byte) 英文(1byte)

    utf-8编码 中文(3byte) 英文(1byte)

    utf-be编码 中文(2byte) 英文(2byte)

    JAVA是双字节编码,一个字符占两个byte,是utf-be编码 @@@@@@@@@@@@@@@@@@@@

    当你的字节序列是某种编码时,此时把字节序列变为字符串,要用同种编码方式,否则会出现乱码。

    Eclipse 默认的是gbk编码 String str1 = new String(byte1,"utf-16be"); #############################

    文本文件内放的是字节序列,可以是任意编码的字节序列, 若在中文机器上编码,则只认识ansi编码

    查看全部
    0 采集 收起 来源:文件的编码

    2018-03-25

  • 利用装饰模式的原理封装的各种方法,方便使用

    writeInt(),writeDouble(),writeUTF()等

    DataInputStream dis = new DataInputStream(new FileInputStream(file));

    包装FileInputStream的目的就是利用他的write()方法封装新的WriteInt()等

    查看全部
  • read(byte[] buf)

    read(byte[], int start, int size) 

    查看全部

  • RandomAccessFile可以对任意文件提供读写访问

    RandomAccessFile ras = new RandomAccessFile(file,"rw");//rw是给ras的操作权限读或则写

    读或则写时有一个pointer指针,打开文件时,指针在开头,pointer=0;

    ras.seek(0);//将指针归为0位置

    ras.write()和ras.read()一次只读写一个字,若是读整数,则是后八位

    i=0x7fffffff为最大int数32位

    ras.write(i>>>24);//整体右移24位,剩下最高八位

    ras.write(i>>>16);//剩下前两个字节,只读写后八位,写下第二高八位

    ras.write(i>>>8);

    ras.write(i);

    其实ras.writeInt();//可以直接写一个整数

    文件读写完毕后一定要关闭

    查看全部

举报

0/150
提交
取消
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!