Java I/O流继承关系详解与应用

需积分: 12 14 下载量 32 浏览量 更新于2024-07-13 收藏 2.75MB PPT 举报
I/O流在Java编程中扮演着至关重要的角色,它们是数据在计算机系统之间传输的基础。Java的I/O流分为输入流(InputStream)和输出流(OutputStream),这两个类别下的类层次结构紧密关联。InputStream是输入流的根,它是一个抽象类,位于java.io包中,代表所有字节级别的输入操作。尽管不能直接实例化InputStream,但它是所有输入流子类(如FileInputStream、BufferedReader等)的共同祖先,这些子类继承了InputStream的方法,使得开发者能够处理各种类型的输入。 InputStream的核心方法包括: 1. `available()`:用于返回当前流中可读的字节数,但在网络流中可能会返回不准确的结果,存在bug,应谨慎使用。 2. `close()`:用于关闭流对象,这是为了释放系统资源,避免内存泄漏。并非所有流都可被关闭,但那些实现了Closeable接口的对象(如InputStream、OutputStream)可以调用这个方法。 Closeable接口是表示一个对象可以被关闭的,它仅包含一个`close()`方法。Java程序在运行时依赖JVM,但对于像I/O流这样的底层操作,JVM无法完全管理,因为它们涉及到硬件或网络连接。因此,程序员需要确保在使用完毕后正确关闭流,以确保资源的有效管理和程序的健壮性。 在更高级别的Java编程中,I/O编程通常涉及到Stream I/O and Files部分,这包括对文件和网络的读写操作。这部分内容涵盖在Java的高级编程接口课程中,如4个专题之一:I/O编程。这个专题可能还会讲解如何使用`FileInputStream`、`FileOutputStream`等具体类进行文件操作,以及如何利用`BufferedInputStream`和`PrintWriter`等优化性能。 此外,课程还涉及到了其他高级主题,如图形用户界面(GUI)编程、多线程和网络编程。这些内容共同构成了Java语言的知识体系结构,为开发者提供了丰富的工具和技术来构建复杂的应用程序。从基础语法和对象导向编程,到异常处理、事件模型和组件库,都是Java开发者必须掌握的核心技能。 在学习过程中,学生会经历从安装和配置Java开发环境,到定义类、包、applets和应用的基本步骤,再到实际编写和调试代码。通过深入理解I/O流的继承关系和使用方法,开发人员能够有效地进行数据输入输出,为他们的项目打下坚实的基础。

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.5/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/hadoop-3.3.1/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap') at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:394) at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:370) at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:60) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:708) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.hadoop.util.RunJar.run(RunJar.java:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

2023-06-03 上传

. 定义一个基类 BaseString,实现基本的输入字符串的功能。 //-------------------------------------------------------------------------------------------------- class BaseString { public: char *GetData();//返回字符串 void Input(); //输入字符串,遇到换行符结束 void Display();//显示字符串 BaseString(); ~BaseString(); unsigned int Getlength(){ return Length;}//获取字符串长度 protected: char Data[1024]; unsigned Length; //表示字符串的长度,不包括结束的'\0' }; //-------------------------------------------------------------------------------------------------- 2. 定义一个类 ReString,公有继承自 BaseString,添加一个函数 Reverse()实 现字符串的倒置功能,即:将对象中的数据成员 Data 数组的元素倒置。倒置的概 念是:原字符串为“abcd1234”,倒置后为“4321dcba”。 3. 定义一个类 CopyString,公有继承自 BaseString,添加一个函数 Copy()实现 字符串的拷贝功能(传入的参数可以是一个字符串对象,也可以从一个字符串常量, 将参数中的字符串拷贝到对象的 Data 数组中去,注意:不要使用系统内置的 strcpy() 函数)。 面向对象程序设计上机指导 20 4. 定义一个类 CmpString,公有继承自 BaseString,添加一个函数 Compare() 实现字符串的比较功能(传入的参数可以是一个字符串对象,也可以从一个字符串 常量,将参数中的字符串同对象中的 Data 进行比较)。 思考字符串比较的算法。注意:不要使用系统内置的 strcmp()函数。 5. 在 main()函数中体现出派生类的构造函数的调用次序。可以在各类的构 造函数中输出“I am the * class’s constructor”。*表示当前类名。 6. 定义一个类 NewString 继承自 ReString、CopyString 和 CmpString 三个类, 在程序中体现出多重继承中的基类的继承程序。为基类 BaseString 增加功能: ToUpper()函数将所有字母大写,ToLower()函数将所有字母小写。并在继承的过程 中声明为虚基类,比较 BaseString 作为虚基类和非虚基类的情况下的区别

2023-05-26 上传