热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java7新I/O知识点详解

在本篇文章里小编给大家整理的是关于java7新IO知识点详解,有需要的朋友们可以学习下。

本章重点是Java语言中改变较大的I/O API,被称为“再次更新的I/O”或NIO.2(即JSR-203)。NIO.2是一组新的类和方法,主要存在于java.nio包内。下面来看一下它的优点。

  • 它完全取代了java.io.File与文件系统的交互。
  • 它提供了新的异步处理类,让你无需手动配置线程池和其他底层并发控制,便可在后台线程中执行文件和网络I/O操作。
  • 它引入了新的Network-Channel构造方法,简化了套接字(Socket)与通道的编码工作。

先看案例。老板让你写个程序,要扫描生产服务器上的所有目录,找出曾经用各种读/写和所有者权限写入过的所有properties文件。对于Java 6(及更低版本)而言,这几乎是不可能完成的任务,因为:

  • 没有直接支持目录树导航的类或方法;
  • 没办法检测和处理符号链接;
  • 用简单操作读不出文件的属性(比如可读、可写或可执行)。

符号链接是一种特殊类型的文件,指向文件系统中的另外一个文件或位置——你可以把它理解为快捷方式。

用Java 7的NIO.2 API可以完成这个不可能的编程任务,它支持目录树的直接导航(Files.walkFileTree(),2.3.1节)、符号链接(Files.isSymbolicLink(),代码清单2-4),能用一行代码读取文件属性(Files.readAttributes(),2.4.3节)。

除此之外,老板还要求你在读取这些properties文件时不能打断主程序的处理流程。可最小的properties文件也有1MB,读取这些文件很可能打断程序的主流程!面对这一要求,在Java 5/6的时代,你很可能会用java.util.concurrent包中的类创建线程池和工作线程队列,再用单独的后台线程读取文件。我们在第4章将会讨论到,现在Java中的并发仍然相当困难,并且非常容易出错。借助Java 7和NIO.2 API,你可以用新的AsynchronousFileChannel(2.5节),不用指定工作线程或队列就可以在后台读取大型文件。咻!

这个新API非常有用,尽管它不能帮你冲咖啡,但它的发展趋势可在那儿摆着呢。

第一个趋势是对其他数据存储方法的探索,特别是在非关系或大数据集领域。你可能很快就会遇到读写大文件(比如微博上的大型报告文件)的问题。NIO.2可以帮助你用一种异步、有效的方式读写大文件,还能利用底层操作系统的特性。

第二个趋势是多核CPU的发展,使得真正并发且更快的I/O成为可能。并发是个难以掌握的领域2,但NIO.2会助你一臂之力,它为多线程文件和套接字访问的应用提供了一个简单的抽象层。即便你不直接使用这些特性,它们也会对你的编程生涯产生极大影响,因为IDE、应用服务器和各种流行的框架会大量应用这些特性。

深入探讨了并发计算可能给你的编程生涯带来的微妙复杂性。

这些只是NIO.2会对你有哪些帮助的例子。如果NIO.2可以解决你眼下面临的一些问题,本章的内容就是为你准备的!否则,你

可以在接到Java I/O 任务时再回来。

本章你会体验到Java 7新I/O的能力,以便你能够开始编写基于NIO.2的代码,并有信心探索新的API。除此之外,这些API还使用了一些第1章提到的特性,这证明Java 7确实会使用自己的特性。

将try-with-resources和NIO.2中的新API结合起来可以写出非常安全的I/O程序,这在Java中还是破天荒的第一次!

我们觉得你很可能会用到新的文件I/O能力,所以本章会非常详细地介绍。你需要从了解新的文件系统抽象层开始,即先了解Path和它的辅助类。在Path之上,你会接触到常用的文件系统操作,比如复制和移动文件。

以上就是本次介绍JAVA7 I/O全部知识点,感谢大家的学习和对的支持。


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
author-avatar
狮子小刚刚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有