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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 对象序列化反序列化
    查看全部
  • 文本文本文件
    查看全部
  • 流的介绍
    查看全部
    1 采集 收起 来源:字节缓冲流

    2018-01-04

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

    2018-01-04

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

    2018-01-03

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

    2018-01-03

  • 序列化过程中子父类构造函数问题 一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 *** 结论:【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。
    查看全部
  • 当被序列化的子类进行反序列化的时,如果其父类没有实现序列化接口,则会调用父类的构造方法。
    查看全部
  • transient 修饰的成员变量不会被默认序列化,需要自己完成该变量的序列化和反序列化,即在类中写一个writeObject方法和readObject方法,方法具体在ArrayList中寻找 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ s.defaultWriteObject();//把jvm能默认序列化的元素进行序列化操作 s.writeInt(stuage);//自己完成stuage的序列化 } private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException{ s.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化操作 this.stuage = s.readInt();//自己完成stuage的反序列化操作 } ObjectOutputStream的实例调用writeObject(obj)方法时,虚拟机通过反射检查对象的类是否实现Serializable接口,如果实现,则虚拟机内部进行序列化操作,同时通过反射检测类是否有writeObject方法,如果有则调用obj的writeObject方法,反序列化类似。
    查看全部
  • IO——对象的序列化和反序列化 一、概念 1、对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化 2、序列化流(ObjectOutputStream),字节的过滤流 —— writeObject()方法 反序列化流(ObjectInputStream)—— readObject()方法 3、序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常。 这个借口,没有任何方法,只是一个【标准】 二、transient关键字 1、transient修饰的元素,不会进行JVM默认的序列化:如int transient age = 10;在序列化和反序列化后,age的值为默认分配的值0 2、可以自己通过重写序列化操作方式,来对transient修饰的元素进行想要的序列化。 ***方法:通过从ArrayList中拿到writeObject()和readObject()方法,进行自写完成。 · 先执行s.defaultWriteObject(); 和 s.defaultReadObject()方法 · 再对于无法默认序列化的成员,可以进行.writeObject(obj)和this.obj = s.readObject()完成序列化 3、这样做的目的是提高效率。如ArrayList里,对数组的有效对象进行序列化
    查看全部
  • BufferedWriter-> bw.write(String line);//向目标文件写入字符串 bw.newLine();//换行 BufferedReader-> readLine()//读一行字符 PrintWriter-> pw.println()//写一行内容
    查看全部
  • 5.字符流:字符流分为输出流(Reader)和输出流(Writer)。操作的是文本文件。 字符处理,一次处理一个字符 字符处理底层还是基本的字节序列 InputStreamReader:完成byte流解析为char流,按照编码解析 FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); //获取字符输入流 InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 OutputStreamWriter:提供char流到byte流,按照编码处理 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); //获取字符输出流 OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流
    查看全部
  • //字符流 InputStreamReader isr = new InputStreamReader(in);//使用默认字符集 InputStreamReader isr = new InputStreamReader(in, "utf-8");//使用指定字符集 (char)isr.read();//一次读取一个字符 OutputStreamWriter osr = new OutputStreamWriter(out);//使用默认字符集 OutputStreamWriter osr = new OutputStreamWriter(out,"utf-8");//使用指定字符集 osr.append(new String("123"));//追加内容
    查看全部
  • 缓冲字节流这一节希望重新录更正错误,使用缓冲字节流复制确实是最快的方式,但对于小文件10M以下的文件体现不出优势,对于百兆文件正确使用,时间可以控制到50ms内。视频中的缓冲字节流使用有错误,复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快。在循环写入的过程中不需要使用flush,就像cwt8805说的,缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,使用flush刷新缓冲就失去了缓冲的意义。最后关闭IO流和文件流应该在finally中关闭,否则IO异常时执行不到close语句,IO流仍然没有关闭。 public class IOUtilTest4 { public static void main(String[] args) throws IOException { long star = System.currentTimeMillis(); // IOUtil.copyFileByByte(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"), new File("E:\\SHL\\imooc\\copy..宮崎歩 - brave heart.mp3"));//5w多毫秒 // IOUtil.copyFileByBuffer(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"),new File("E:\\SHL\\imooc\\copyFileByBuffer..宮崎歩 - brave heart.mp3"));//200多毫秒 IOUtil.copyFile(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"),new File("E:\\SHL\\imooc\\copyFile宮崎歩 - brave heart.mp3"));//15毫秒 long end = System.currentTimeMillis(); System.out.println(end-star); } }
    查看全部
    2 采集 收起 来源:字节缓冲流

    2018-03-22

  • readInt readLong 方法都是对FileInputStream方法的包装 DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file)) wrieteUTF()采用utf-8编码写出字符串 用utf-16be写出字符串,或字符串数组 写完之后一定要关闭流 数据输入输出流: DataInputStream、DataOutputStream 是对“流”功能的扩展,方便读写 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeLong(10l);字母l dos.writeDouble(10.5); //采用utf-8编码写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国");
    查看全部

举报

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

微信扫码,参与3人拼团

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

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