ii.IO字节流——的输入输出:
[1]InputStream和OutputStream简介:
这两个类是字节流的抽象读写类,两个类都为抽象类,类定义如下:
public abstract class InputStream extends Object implements Closeable
public abstract class OutputStream extends Object implements Closeable,Flushable
这里引入一点题外话,就是二者实现的两个接口的简单讲解:
Closeable接口(1.5 ): Closeable接口是从JDK 1.5 才引入的一个新的接口,该接口是可以关闭IO数据源或者目标的,调用close方法可释放对象保存的资源,比如我们常用的打开的文件。该接口里面只有一个方法:
void close() throws IOException
【个人思考*:这里提供一点点比较新的资料,在JDK 1.7 里面开始支持C#里面使用的 资源闭包 ,也就是类似C#里面的using语句的扩展方式,只是Java语言的关键字是try ,这种设计刚好为这种实现做了一定层次的铺垫,也就是在JDK 1.7 过后所有的资源在读写过程不需要显示调用close()方法 ,同样类似C#里面的using语句使用try块语句实现在一个代码块里面使得里面的输入输出流自动关闭,该接口的引入也使得所有输入输出流在操作过程更加倾向于规范,因为在JDK 1.5之前,所有的close()操作都是由类本身提供的,这种方式无疑使得整个关闭显得不够正规。而且需要谨记的是,所有的IO资源最好在最终处理的时候使用正常的代码方式关闭 ,否则会占用系统资源。】
Flushable接口(1.5 ) :Flushable接口也是JDK 1.5 才引入的一个新接口,该接口是可刷新数据的目标接口,调用flush方法将所有已经缓冲输出的数据写入底层流,该接口和Closeable一样,里面仅仅包含了一个输出流的常用方法:
void flush() throws IOException
【*:初学者对flush方法会存在很多困惑,有时候不知道该方法到底是怎么在执行,而在很多输出流中都会使用到flush方法。首先需要理解的是操作系统文件写入的原理,一般情况下,不论是写入的目标源是文件、控制台还是网络,其写入的原理都类似,使用Java语言编程的时候, Java语言本身只会衔接到JVM平台这一层,除非使用JNI(其实JNI也没有直接使用Java语言调用操作系统的API),否则Java语言很难直接操作操作系统底层的一些数据以及相关内容交互。 而IO输出的时候,往往是将数据写入缓冲区,一般情况下缓冲区存在于操作系统的内存,针对文件系统的操作有四个: 打开、关闭、读、写 ,JVM在执行命令过后,会将底层的操作递交给操作系统本身来完成。flush的操作就负责发送请求,请求操作系统将缓冲区的内容写入到磁盘上的物理文件,如果不定义缓冲区的大小,就根据JVM本身的配置和操作系统的本身性质由操作系统决定什么时候写入,一般情况下不进行该操作的话会实时写入 ,如果定义了缓冲区情况可能就不一样了。】
[2]字节流类结构详解:
InputStream和OutputStream都是抽象类,在实例化的时候,一般情况下是使用它子类进行实例化,它们本身不存在实例 。
InputStream字节流输入的类结构:
[A] InputStream(1.0 )
|—[C] javax.sound.sampled. AudioInputStream(1.3 )
|—[C] ByteArrayInputStream(1.0 )
|—[C] FileInputStream(1.0 )
|—[C] FilterInputStream(1.0 )
|—[C] BufferedInputStream(1.0 )
|—[C] java.util.zip. CheckedInputStream(1.6 )
|—[C] javax.crypto. CipherInputStream(1.4 )
|—[C] DataInputStream(1.0 )
|—[C] java.util.zip. DeflaterInputStream(1.6 )
|—[C] java.security. DigestInputStream(1.6 )
|—[C] java.util.zip. InflaterInputStream(1.6 )
|—[C] java.util.zip. GZIPInputStream(1.6 )
|—[C] java.util.zip. ZipInputStream(1.6 )
|—[C] java.util.jar. JarInputStream(1.2 )
|—[C] LineNumberInputStream(1.0 )【已过时】
|—[C] javax.swing. ProgressMonitorInputStream
|—[C] PushbackInputStream(1.0 )
|—[A] org.omg.CORBA.portable. InputStream(1.2 )
|—[A] org.omg.CORBA_2_3.portable. InputStream(1.2 )
|—[C] ObjectInputStream(1.1 )
|—[C] PipedInputStream(1.0 )
|—[C] SequenceInputStream(1.0 )
|—[C] StringBufferInputStream(1.0 )【已过时】
InputStream是表示字节流输入的所有类的超类,它的几个子类的介绍如下:
——AutioInputStream(1.3 )类 (javax.sound.sampled. AudioInputStream ):该类是音频输入流,具有指定音频格式和长度的输入流,长度用实例帧表示而不使用字节。该类提供了几种方法,用于从流读取一定数量的字节,或未指定数量的字节,音频输入流跟踪所读取的最后一个字节,可以跳过任意数量的字节以达到稍候的读取位置。该输入流可支持标记,设置标记的时候,会记住当前的位置,以便可以稍候返回该位置。
Java的AudioSystem类包括了许多操作AudioInputStream对象的方法,这些方法可以做以下的事情:
从外部音频文件、流或URL获得音频输入流
从音频输入流写入外部文件
将音频输入流转换为不同的音频格式
该类不是属于java.io的包,所以这个地方针对该类就不做过多的讨论。
——ByteArrayInputStream(1.0 )类: 该类包含了Java定义的一个内部的缓冲区 ,该缓冲区包含从流中读取的字节,内部计数器跟踪read方法要提供的下一个字节,若该输入流被关闭就无效,但是此类中的方法在关闭此流过后仍然可以被调用 ,而且不会产生IOException
——FileInputStream(1.0 )类: 该类从文件系统中的某个文件中获得输入字节 ,哪些文件可以取决于定义的主机环境,该类也可以用于读取图像数据之类的原始字节流
——FilterInputStream(1.0 )类: 该类包含了其他一些输入流,它将这些流作用其基本数据源,它可以直接传输数据或提供一些额外的功能,FilterInputStream类本身只是简单地重写那些将所有请求传递给所包含输入流的InputStream的所有方法,FilterInputStream的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。
——BufferedInputStream(1.0 )类: 该类为另一个输入流添加一些功能,即缓冲输入 以及支持mark和reset方法 的能力,在创建BufferedInputStream时,会创建一个内部缓冲区数组,在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark操作记录输入流中的某个点,reset操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次mark操作后读取的所有字节。
—— java.util.zip. CheckedInputStream(1.6 )类: 该类是读取一个压缩包里面的类,是一个需要维护所读取数据校验和的输入流 ,校验和用来验证输入数据的完整性。
—— javax.crypto. CipherInputStream(1.4 )类: 该类由一个InputStream和一个Cipher组成,这样read()方法才能返回从底层InputStream读入但已经由该Cipher另外处理过的数据,在由CipherInputStream使用之前,该Cipher必须充分初始化 。如果Cipher初始化为解密,在返回解密的数据之前,CipherInputStream将尝试读入数据并且将其解密。该类严格遵守此语义,尤其是其祖先类FilterInputStream和InputStream的语义。此类具有其祖先类中指定的所有方法,并且对所有的这些方法进行了重写,除此之外,此类还对其祖先类未抛出的所有异常进行捕获。
——DataInputStream(1.0 )类: 数据输入流允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型,应用程序可以使用数据输出流写入由数据输入流读取的数据,DataInputStream有一点需要注意,对于多线程访问 不一定是安全的 ,线程安全是可以通过方法设置,它由此方法的使用者负责。
——java.util.zip. DeflaterInputStream(1.6 )类: 该类为使用“deflate” 压缩格式压缩数据实现输入流过滤器。
——java.security. DigestInputStream(1.6 )类: 使用通过流的位更新关联消息摘要的透明流,要完成消息摘要计算,先要调用此摘要输入流的一个read方法,之后在关联的信息摘要上调用一个digest方法。开启或关闭此流都是可能的,开启的时候,调用read方法之一将导致消息摘要的更新,但是关闭的时候,不更新消息摘要,该流在默认情况下是开启的。
——java.util.zip. InflaterInputStream(1.6 )类: 此类为解压缩“deflate” 压缩格式的数据实现流过滤器,它还用做其他解压过滤器的基础。
——java.util.zip. GZIPInputStream(1.6 )类: 此类为读取GZIP文件格式的压缩数据实现流过滤器
——java.util.zip. ZipInputStream(1.6 )类: 该类为读取ZIP文件格式的文件输入流过滤器。包括对已知和未压缩条目的支持。
——java.util.jar. JarInputStream(1.2 )类:JarInputStream 类用于从任何输入流读取JAR文件内容,它扩展了java.util.zip. ZipInputStream 类,使之支持读取可选的Manifest条目,Manifest可用于存储有关JAR文件及其条目的元信息
——LineNumberInputStream(1.0 )类【已过时】 : 该类已经过时这里不做讨论
——javax.swing. ProgressMonitorInputStream类: 监视读取某些InputStream的进度,这可以创建一个进度监视器,以监视读取输入流的进度,如果需要一段时间,将会弹出ProgressDialog,以通知用户,该类一般在Java Swing的开发中更加常见。
——PushbackInputStream(1.0 )类: 该类为另一个输入流添加性能,即“推回(push back )” 或“取消读取(unread )” 一个字节的能力,在代码片段可以很方便地读取由特定字节值分割的不定数据的数据字节时,这很有用;在读取终止字节后,代码片段可以“取消读取”该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。
【*:org.omg的子包里面的两个类这里不做说明,IO部分暂时不涉及这一块内容,而且我自己平时用得也很少】
——ObjectInputStream(1.1 )类: 【该类在序列化和反序列化章节进行介绍】
——PipedInputStream(1.0 )类: 管道输入流应该连接到通道输出流,管道输入流提供要写入管道输出流的所有数据字节,通常数据由某个线程从PipedInputStream对象读取,并由其他线程将其写入到相应的PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程 。管道输入流包含一个缓冲区,可以在缓冲区限定的范围内将读和写操作分离开,如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。
——SequenceInputStream(1.0 )类: 该类表示其他输入流的逻辑串联,它从输入流的有序集合开始,并且从第一个输入流开始读取,直到文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
OutputStream字节流输出的类结构:
[A] OutputStream(1.0 )
|—[C] ByteArrayOutputStream(1.0 )
|—[C] FileOutputStream(1.0 )
|—[C] FilterOutputStream(1.0 )
|—[C] BufferedOutputStream(1.0 )
|—[C] java.util.zip. CheckedOutputStream(1.6 )
|—[C] javax.crypto. CipherOutputStream(1.4 )
|—[C] DataOutputStream(1.0 )
|—[C] java.util.zip. DeflaterOutputStream(1.6 )
|—[C] java.util.zip. GZIPOutputStream(1.6 )
|—[C] java.util.zip. ZipOutputStream(1.6 )
|—[C] java.util.jar. JarOutputStream(1.6 )
|—[C] java.security. DigestOutputStream
|—[C] java.util.zip. InflaterOutputStream(1.6 )
|—[C] PrintStream(1.0 )
|—[C] java.rmi.server. LogStream(1.1 )【已过时】
|—[C] ObjectOutputStream(1.1 )
|—[A] org.omg.CORBA.portable. OutputStream(1.2 )
|—[A] org.omg.CORBA_2_3.portable. OutputStream(1.2 )
|—[C] PipedOutputStream(1.0 )
OutputStream类是表示字节流输出的所有类的超类,它的子类如下:
——ByteArrayOutputStream(1.0 )类: 此类实现了一个输出流,其中的数据被写入一个byte数组 ,缓冲区会随着数据的不断写入而自动增长 ,可使用toByteArray() 和toString() 方法获取数据。
——FileOutputStream(1.0 )类: 文件输出流是用于将数据写入File或FileDescriptor 的输出流,文件是否可用或能否可以被创建取决于基础平台,特别是某些平台一次只允许一个FileOutputStream打开文件 进行写入 ,在这种情况下,如果所涉及的文件已经打开,则此类的构造方法将会失败。
——FilterOutputStream(1.0 )类: 此类是过滤输出流的所有类的超类,这些流位于已存在的输出流之上,它们将已存在的输出流作为基本数据接收器,但可能直接传输数据或提供一些额外的功能。FilterOutputStream类本身只是简单地重写那些将所有请求传递给所包含输出的OutputStream的所有方法 。FilterOutputStream的子类可进一步地重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。
——BufferedOutputStream(1.0 )类: 该类实现缓冲的输出流,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
—— java.util.zip. CheckedOutputStream(1.6 )类: 需要维护写入压缩包的输出流,主要用来维护校验和,校验和可以用于验证输出数据的完整性 。
—— javax.crypto. CipherOutputStream(1.4 )类: 该类由一个OutputStream 和一个Cipher 组成,这样writer()方法才能在将数据写出到底层OutputStream之前对数据进行处理,在由CipherOutputStream使用之前,密码必须充分进行初始化 。比如密码初始化加密,CipherOutputStream将在写出该加密数据之前尝试加密该数据,该类和CipherInputStream相对应
——DataOutputStream(1.0 )类: 数据输出流允许应用程序以适当的方式将基本Java数据类型写入输出流中,然后,该应用程序可以使用数据输入流将数据读入。
—— java.util.zip. DeflaterOutputStream(1.6 )类: 此类为使用“deflate” 压缩格式压缩数据实现输出流过滤器,它还用作其他类型的压缩过滤器的基础
—— java.util.zip. GZIPOutputStream(1.6 )类: 此类为使用GZIP文件格式写入压缩数据实现流过滤器
—— java.util.zip. ZipOutputStream(1.6 )类: 该类为以ZIP文件格式写入文件实现输出流过滤器,包括对已压缩和未压缩的条目的支持
—— java.util.zip. JarOutputStream(1.4 )类: 该类用于向任何输出流写入JAR文件内容,它扩展了ZipOutputStream类,使之支持编写可选的Manifest条目,Manifest可用于指定有关JAR文件以及条目的元信息。
——java.security. DigestOutputStream类: 使用通过流的位更新关联消息摘要的透明流,要完成消息摘要的计算,先要调用此摘要输出流的一个write方法,之后在关联的消息摘要上调用digest方法之一。开启或关闭此流都是可能见的,开启时,调用write方法之一将导致消息摘要的更新,但是关闭的时候不需要消息更新,流在默认情况下是开启的。
——java.util.zip. InflaterOutputStream(1.6 )类: 为解压缩“deflate” 压缩格式存储的数据实现输出流过滤器
——PrintStream(1.0 )类: 该类为其他输出流添加了功能,使它们能够方便地答应各种数据值表示形式,它还提供其他两项功能,与其他输出流不同,PrintStream永远不会抛出IOException ;而是,异常情况仅设置可通过checkError 方法测试的内部标志,另外,为了自动刷新,可以创建一个PrintStream;这意味着可在写入byte数组之后自动调用flush方法,不需要 手动调用 ,可以调用其中一个println方法,该方法末尾会写入一个“/n”符
——java.rmi.server. LogStream(1.1 )类:【已过时】 ,该方法提供一种记录错误的机制,这一机制专门用来监视系统运行情况
——ObjectOutputStream(1.1 )类: 【该类在序列化和反序列化章节进行介绍】
【*:org.omg的子包里面的两个类这里不做说明,IO部分暂时不涉及,而且我自己平时用得也很少】
——PipedOutputStream(1.0 )类: 可以将管道输出流连接到管道输入流来创建通信管道,管道输出流是管道的发送端,通常,数据由某个线程写入PipedOutputStream对象,并由其他线程从连接的PipedInputStream读取,不建议对这两个对象尝试使用单个线程,因为这样有可能造成使用线程死锁,如果某个线程正从连接的管道输入流中读取数据字节,但该线程不再处于活动状态,则该管道损毁。
[3]字节流IO类的操作:
InputStream抽象类中的操作:
abstract int read():
该方法用来读取字节,并且返回读取到的字节,如果这个字节流结束 的时候,这个方法会返回-1 。
int read(byte [] b):
该方法将读取到的字节存储在传入的一个字节缓冲区也就是一个字节数组里面,而且每一次按照该数组的长度(b.length) 读取字节,和上边方法一样,如果读取到字节流的末尾该方法会返回-1 。
int read(byte [] b,int off,int len):
和上边方法一模一样,唯一不同的是三个参数:
b :将数据读入的缓冲区字节数组
off :将字节放入的数组的第一个位置
l en :需要读取的字节的最大长度
【*:这两个方法都是使用一个自定义的字节数组作为读取过程的读取缓冲区,只是操作方法不一样,具体操作可以根据当时的需求来选择。】
long skip(long n):
在输入流里面跳过n个字节,该方法返回跳过的字节数(前提条件是跳过的字节长度比流数据的总长度要小)
int available():
返回数据流里面合法数据的流数据块的数据流的字节长度
void close():
关闭输入流
void mark(int readlimit):
在输入流的某个地方放入一个标记,如果超过readlimit的字节数需要读取,则该字节流会自动忽略该标记
void reset():
返回输入流的最后一个标记,一般情况用来重置该输入流
boolean markSupported():
判断一个输入流是否支持标记功能,如果不支持标记功能就直接返回false ,反之返回true
OutputStream抽象类中的操作:
abstract void write(int n):
写入n个字节的数据
void write(byte [] b):
void write(byte [] b,int off,int len):
使用一个缓冲区字节数组来进行数据的写入,先把数据写入一个字节缓冲区,然后再进行流数据写入,和read方法 相对应
void close():
关闭输出流
void flush():
该方法就是输出流里面的特殊方法,把操作系统缓冲区里面的数据直接向物理目标源进行写入操作,这里缓冲区可以理解为缓冲区字节数组。
【*:其实从Java语言可以知道,当定义一个对象的时候,该对象是存储在内存里面的,也就是当创建了一个字节数组的时候,可以默认定义了一个内存里面的缓冲区,用来进行数据读写的缓冲做辅助使用。】
iii.IO字符流——输入和输出:
[1]Reader和Writer简介:
这两个类是字符流的IO读写超类,二者的类定义如下:
public abstract class Reader extends Object implements Readable,Closeable
public abstract class Writer extends Object implements Appendable,Closeable,Flushable
这里需要介绍两个新接口:
Readable接口(1.5 ): 该接口是一个以字符为输入源 的接口,一般只有字符流才会用到该接口,字节流不会使用这个接口
Appendable接口(1.5 ): 能够被添加char序列和值的对象,如果某个类的实例打算收取自Formatter的格式化输出,那么该类必须实现Appendable接口,要添加的字符应该是有效的Unicode字符,增补字符可能由多个16位char值组成,同样该接口不是线程安全 的。
[2]字符流类结构详解:
Reader字符流输入的类结构:
[A] Reader(1.1 )
|—[C] BufferedReader(1.1 )
|—[C] LineNumberReader(1.1 )
|—[C] CharArrayReader(1.1 )
|—[A] FilterReader(1.1 )
|—[C] PushbackReader(1.1 )
|—[C] InputStreamReader(1.1 )
|—[C] FileReader(1.1 )
|—[C] PipedReader(1.1 )
|—[C] StringReader(1.1 )
Reader是字符流输入的超类,它的子类解析如下:
——BufferedReader(1.1 ): 从字符输入流中读取文本,缓冲每个字符,从而实现字符、数组和行的高效读取。和Stream字节输入流一样,这个字符输入流同样可以指定缓冲区的大小,或者使用默认大小。
【*:这里有一天我自己也很困惑,仔细思考一下。照理说,上边讲到的字节的实时读取是不对的,BufferedReader的说法,实际上系统默认是存在一个缓冲区的,当写程序的时候如果没有自定义缓冲区,输入和输出使用的都是系统的缓冲区而不是实时读取,不过这一点影响不会太大,当我们真正需要提高IO性能的时候,下边会讲到一些比较简单的IO部分性能的提升法则。】
——LineNumberReader(1.1 ): 跟踪行号的缓冲字符输入流,此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行号编号从0开始,该行号随数据读取在每个行结束的地方开始递增,并且可以通过调用setLineNumber(int)更改行号。但是需要注意的是,该方法不会实际更改流当中的当前位置,它只是修改了getLineNumber()的返回值,其识别符号为:换行符“/n”、回车“/r”、或者回车后边紧跟换行符。
——CharArrayReader(1.1 ): 此类直接实现一个用作字符输入流的字符缓冲区
——FilterReader(1.1 ): 用于读取已过滤的字符流的抽象类,该类自身提供了一些将所有请求传递给包含的默认方法,它的子类应该重写这些方法中的一些,并且还可以提供一些额外的方法和字段。
——PushbackReader(1.1 ): 允许将字符推回到流的字符流Reader。
——InputStreamReader(1.1 ): 这是字节流到字符流的桥梁类 ,它使用指定的charset编码格式读取字节并且将其解码为字符,它使用的字符集可以由名称指定或者显示给定,或者可以接受平台默认的字符集。每次调用InputStreamReader中的一个read()方法都会导致从底层输入流中读取一个或者多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节,为了达到更高效率,可要考虑在BufferedReader内包装InputStreamReader。
——PipedReader(1.1 ): 直接传送字符的管道字符流输入类
——StringReader(1.1 ): 直接使用输入源为字符串的字符流输入 类
Writer字符流输出的类结构:
[A] Writer(1.1 )
|—[C] BufferedWriter(1.1 )
|—[C] CharArrayWriter(1.1 )
|—[A] FilterWriter(1.1 )
|—[C] OutputStreamWriter(1.1 )
|—[C] FileWriter(1.1 )
|—[C] PipedWriter(1.1 )
|—[C] PrintWriter(1.1 )
|—[C]StringWriter(1.1 )
Writer是字符流输出的超类,它的子类解析如下:
——BufferedWriter(1.1 ): 该类将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串 的高效写入 。
——CharArrayWriter(1.1 ): 此类实现一个可用作Writer的字符缓冲区,缓冲区会随向流中写入数据而自动增长,可使用toCharArray() 和toString() 获取数据,在此类上调用close()无效,并且在关闭该流后可以调用此类中的方法,而不会产生任何IOException。
——FilterWriter(1.1 ): 用于写入已过滤的字符流的抽象类,该类自身提供了所有请求传递给所包含字符流的默认方法,FilterWriter的子类应该重写这些方法中的一些方法,并且可以提供一些额外的方法和字段。
——OutputStreamWriter(1.1 ): 该类是字符流通向字节流的桥梁 ,可使用指定的charset将要写入流中的字符编码成字节,它使用的字符集可以由名称指定或显示给定,否则将接受平台默认的字符集,在调用过程,考虑使用OutputStreamWriter包装到BufferedWriter中,以避免频繁调用转换器
——FileWriter(1.1 ): 用来写入字符文件的便捷类,此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可以接受的,如果要自己指定,可以在FileOutputStream上构造一个OutputStreamWriter。文件是否可用或是否可以被创建取决于底层平台 ,特别是某些平台一次只允许一个FileWriter打开文件进行写入,这样的情况下,如果文件已经打开则就会构造失败。
——PipedWriter(1.1 ): 直接传送字符的管道字符流输出类
——PrintWriter(1.1 ): 向文本输出流打印对象的格式化表示形式,此类实现在PrintStream中的所有方法,它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。【*:该类和PrintStream不一样,该类不是等到特定的符号才完成刷新,如果启用了自动刷新过后,调用了println和printf以及format几个方法中的一个的时候才可能完成此操作,同样的这个类不会抛出IOException异常】
——StringWriter(1.1 ): 一个字符流,主要限制了目标输出源,这个方法主要用于目标源为String类型的对象的时候
iv.使用范例
上边介绍了IO的大部分类,下边使用代码针对一些特殊的情况进行说明和讲解,以帮助读者了解IO类的一些用法,关于File的部分保留到文件章节去讲,这里主要讲解上边比较常用的一些类以及一些常用的场景。
[1]普通使用范例介绍:
——[$] 输入输出的拷贝——
package org.susan.java.io;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class StreamCopier {
public static void main(String args[]){
try {
copy (System.in , System.out );
}catch (IOException ex){
System.err .println(ex);
}
}
public static void copy(InputStream in,OutputStream out) throws IOException{
byte [] buffer = new byte [1024];
while (true ){
int bytesRead = in.read(buffer);
if ( bytesRead == -1)
break ;
out.write(buffer, 0, bytesRead);
}
}
}
该类在输入流和输出流里面进行了拷贝操作,在方法内部创建了一个1024字节长度的自定义缓冲区 ,然后把输入的字符读入并且通过输出流输出。
在Java语言标准的I/O模型中,提供了System.in、System.out、System.err 三个
System.in: 该类属于java.lang.System 类的一个内部类,类类型为InputStream,这个类属于“标准”输入流 ,此流已打开并准备提供输入数据,通常此流对应键盘输入或者由主机环境或用户指定的另一个输入源,在Windows环境下,该输入流默认对应的是控制台里面的输入。
System.out: 该类属于java.lang.System 类的一个内部类,类类型为PrintStream,这个类属于“标准”输出流 ,此流已打开并准备接受输出数据,通常此流对应显示器输出或者由主机环境指定的另外一个输出目标,和System.in一样,在Windows环境下,该输出流默认对应的是控制台的输出。
System.err:“标准”错误输出流 ,此流已打开并准备接受输出数据,通常,此流对应于显示器或者由主机环境或用户指定的另一个输出目标,按照惯例,此输出流是用于错误信息输出的。
上边例子演示了从InputStream类型的System.in到PrintStream类的System.out 的字节拷贝,是一个很简单的IO的例子,上边的程序这里不提供演示效果,是一个在Console上边的用户可交互的程序,输入的是什么内容,输出就是什么,类似我们最开始学习C++的时候的cin和cout的交互操作。
——[$] 从URL读取流数据——
package org.susan.java.io;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
public class URLStream {
public static void main(String [] args) throws IOException{
InputStream inputStream = null ;
try {
URL url = new URL("http://www.google.com" );
inputStream = url.openStream();
for ( int c = inputStream.read(); c != -1; c = inputStream.read()){
System.out .write(c);
}
inputStream.close();
}catch (MalformedURLException ex){
System.err .println("Not a URL Java understands." );
}finally {
if ( inputStream != null )
inputStream.close();
}
}
}
这一段代码直接从一个在线的URL地址获取数据流,然后把从这个地址获取到的内容在控制台打印出来,读取的方式调用的是InputStream的read方法,它会逐个字节从字节流里面读取直到这个字节流被读取完为止。这里输出的是从http://www.google.com 地址读取到的HTML的代码,为方便初学者,我这里提供该程序的输出,找了个比较简洁的的页面也是不占篇幅:
你可能感兴趣的:(Java系列教程)
Java面试高频问题深度解析:JVM、锁机制、SQL优化与并发处理
Debug Your Career
面试 java 面试 jvm
问题列表Java中如何实现一个工作流引擎?Bean的作用域有哪些?JVM中的锁机制是如何工作的?三个方法分别被synchronized锁住,方法a调用方法b,b能获取到a的锁吗?会有什么问题?SQL优化时,EXPLAIN中需要关注哪些关键点?什么是覆盖索引?SELECT*一定不会命中索引吗?SELECT*和SELECT全字段在性能上有区别吗?什么是回表?它与索引有什么关系?100万数据分给10个线
JavaScript基础-DOM的一些基本常用语法
Southern Wind
JavaScript javascript
总结了一下JS一直到DOM中所用的单词的用法输入方式:window.prompt('请输入数据');输出方式:1、window.alert('HelloJavaScript');2、console.log输出到控制台3、输出数据到页面document.write('hello')JavaScript数据类型1、基本类型string:字符型number:数值型boolean:布尔型2、特殊类型und
CopyOnWriteArrayList详解
重生之我在成电转码
java 开发语言 集合
1️⃣什么是CopyOnWriteArrayList?java.util.concurrent包下的线程安全的List读多写少场景下的性能优选核心思想:写时复制(Copy-On-Write)2️⃣底层原理内部维护一个volatileObject[]array读操作:直接读取数组,不加锁,性能极高写操作(增删改):加ReentrantLock互斥锁把原数组复制一份新数组在新数组上操作操作完成后,替换
JavaScript基础-删除事件(解绑事件)
難釋懷
javascript 前端 开发语言
在现代Web开发中,动态地添加和移除事件处理器是构建交互式网页的关键技能之一。虽然添加事件处理器相对直观,但了解如何有效地移除或“解绑”这些处理器同样重要。这不仅有助于优化性能,还能防止潜在的内存泄漏问题。本文将介绍几种方法来删除JavaScript中的事件处理器,并探讨它们的应用场景及最佳实践。一、为什么需要删除事件?随着页面复杂度的增加,不恰当地管理事件处理器可能会导致性能下降或出现意外行为。
fastjosn注册自定义序列化器
林发和
开发语言 java
自定义序列化器: importcom.alibaba.fastjson.serializer.JSONSerializer; importcom.alibaba.fastjson.serializer.ObjectSerializer; importorg.springframework.boot.actuate.health.Status; importjava.io.IOExcepti
没想到枚举Enum类还能实现接口!教你玩转Java枚举Enum
林发和
Java 干货分享 java
枚举是什么?枚举是一种特殊的数据类型,预先定义一组常量(对象),并且必须为其赋值。Java枚举类型的基本想法非常简单:这些类通过共有的静态final域为每个枚举常量导出一个实例。枚举类型没有可以访问的构造器,所以它是真的final类。客户端不能创建枚举类型的实例,也不能对它进行扩展,因此不存实例,而只存在声明过程的枚举常量。也就是枚举类型是实例受控的。它们是单例(Singleton)的范型化,本质
SpringBoot 整合security 实现自定义Token和clientId登录及退出(二)
.猫的树
spring boot spring java
接上一篇6.认证相关处理创建登录成功DemoAuthenticationSuccessHandler.java/***用户身份验证通过处理*/@Component@SuppressWarnings("all")publicclassDemoAuthenticationSuccessHandlerimplementsAuthenticationSuccessHandler{@Autowiredpri
Flink sql-clinet 查询报错
lhfmqc
sql-clinet 运行问题 查询报错 flink
Flinksql-clinet查询报错运行后进行select'helloworld’报以下错误,couldnotexecutesqlstatementjava.net.NoRouteToHostException:Noroutetohost在关闭防火墙之后仍无法解决这个时候你需要进入flinkconf配置中查看flink-conf.yaml文件,查看jobmanager.rpc.address该地
178.HarmonyOS NEXT系列教程之列表交换组件错误处理机制
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之列表交换组件错误处理机制效果演示1.错误处理架构1.1错误类型定义//错误类型枚举enumErrorType{DATA_ERROR,//数据错误OPERATION_ERROR,//操作错误NETWORK_ERROR,//网络错
Python基于深度学习的动物图片识别技术的研究与实现
Java老徐
Python 毕业设计 python 深度学习 开发语言 深度学习的动物图片识别技术 Python动物图片识别技术
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取源码联系精彩专栏推荐订阅不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅Java项目精品实战案例《100套》Java微信小程序项目实战《100套》感兴趣的可以先收藏起来,还有大家
Linux脚本实践1
一点多余.
linux 运维 服务器 脚本
前言日常在Liunx中用到多个版本的java修改很麻烦,一个脚本搞定。1.准备两个jdk(如下图所示)2.准备脚本文件viswitch_jdk.sh#!/bin/bash#提示用户输入JDK路径read-p"请输入JDK的绝对路径(例如/usr/local/jdk/jdk-11.0.21):"jdk_path#检查输入的路径是否存在if[!-d"$jdk_path"];thenecho"错误:路径
Spring Bean 的生命周期:从创建到销毁的完整解析
一点多余.
java 开发语言
引言:为什么需要了解SpringBean的生命周期?在Spring框架中,Bean是应用程序的核心构建块,理解其生命周期对于开发高效、稳定的应用至关重要。根据2023年JetBrains开发者调查报告,超过75%的Java开发者使用Spring框架,而Bean的生命周期管理是Spring的核心特性之一。以下数据展示了Bean生命周期的重要性:90%的Spring性能问题与Bean的初始化或销毁不当
197.HarmonyOS NEXT系列教程之图案锁振动反馈实现详解
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之图案锁振动反馈实现详解效果预览1.振动功能实现startVibrator(vibratorCount?:number){try{vibrator.startVibration({//设置为'preset',可使用系统预置振动效
187.HarmonyOS NEXT系列教程之列表切换案例交互实现详解
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之列表切换案例交互实现详解效果演示1.交互系统概述1.1交互类型//支持的交互类型1.长按拖动排序2.左滑删除3.点击选择4.拖拽动画1.2手势配置//组合手势配置.gesture(GestureGroup(GestureMod
188.HarmonyOS NEXT系列教程之列表切换案例工具类与最佳实践
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之列表切换案例工具类与最佳实践效果演示1.日志工具类1.1Logger类实现classLogger{privatedomain:number;privateprefix:string;privateformat:string='
186.HarmonyOS NEXT系列教程之列表切换案例数据管理详解
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之列表切换案例数据管理详解效果演示1.数据模型设计1.1ListInfo类@ObservedexportclassListInfo{//列表项数据结构icon:ResourceStr='';//图标资源name:Resource
181.HarmonyOS NEXT系列教程之列表交换组件整体架构详解
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之列表交换组件整体架构详解效果演示1.组件概述1.1功能介绍ListExchangeViewComponent是一个支持列表项交换和删除的自定义组件,主要用于实现如扣款列表等场景。主要功能包括:列表项拖拽排序滑动删除自定义列表项
今日BUG— java.lang.NumberFormatException
水晶果冻1125
其它 bug int范围
今日照例巡检系统,打开系统的汇聚首页,发现数据都消失了,于是查看其他服务器上部署的版本也出现了同样的问题,而其他功能并未受影响,排除后台服务挂掉的可能,内心生出疑问一直运行稳定的程序怎么突然都查不出来内容了呢?赶紧查看系统运行日志,果然看见了报错信息java.lang.NumberFormatException:Forinputstring:"2315841207"于是赶紧确认了下int数据类型的
Java24的新特性
hello_ejb3
redis 数据库 java
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22的新特性Java23的新特性Java2
JavaScript 性能优化实战:优化循环结构提升效率
deying0865423
javascript 开发语言
目录一、理解循环的性能损耗二、减少循环迭代次数(一)缓存数组长度(二)提前终止循环三、优化循环内部操作(一)避免在循环内执行复杂计算(二)减少DOM操作四、选择合适的循环类型(一)for循环与while循环的选择(二)for...in与for...of的使用场景在JavaScript编程中,循环结构是实现重复执行任务的基础工具。然而,不当的循环使用常常会导致性能瓶颈,特别是在处理大量数据时,循环的
漫谈jvm
另一个绝影
JVM 漫谈jvm
背景介绍jvm已经是Java开发的必备技能了,jvm相当于Java的操作系统。JVM,javavirtualmachine,即Java虚拟机,是运行javaclass文件的程序。Java代码经过Java编译器编译,会编译成class文件,一种平台无关的代码格式,class文件按照jvm规范,包括了java代码运行的数据和代码等内容。jvm加载class文件后,就可以执行java代码了。JVM有不同
漫谈JVM
weixin_34111790
运维 java python
2019独角兽企业重金招聘Python工程师标准>>>背景介绍创建了一个技术类公众号:一起源码分析,里面会分享最新的开源代码、源码解读、开发技巧等,欢迎大家关注。JVM已经是Java开发的必备技能了,JVM相当于Java的操作系统。JVM,javavirtualmachine,即Java虚拟机,是运行javaclass文件的程序。Java代码经过Java编译器编译,会编译成class文件,一种平台
流浪地球 - 华为OD机试真题(E卷、Java)
什码情况
华为od java 数据结构 算法 面试 机试
针对刷题难,效率慢,我们提供一对一算法辅导,针对个人情况定制化的提高计划(全称1V1效率更高)。有兴趣的同学可以扫码添加我们的微信(code5bug)了解,免费试课一下。题目描述流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N。1).初始状态下所有的发动机都是未启动状态;2).发动机启动的方式分为”手动启动”和”关联启动”两种方式;3).如果在时刻1一个发动机被启动,下一个时刻
基于 MySQL 和 Spring Boot 的在线论坛管理系统设计与实现
城南|阿洋-计算机从小白到大神
mysql spring boot 数据库
markdownCopy✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、pyhton、机器学习技术领域和毕业项目实战✌哈喽兄弟们,好久不见哦~最近整理了一下之前写过的一些小项目/毕业设计。发现还是有很多存货的,想一想既然放在电脑里面也吃灰,那么还不如分享出去,没准还可以帮助到
模板方法模式
烟沙九洲
设计模式 模板方法模式 java
模板方法(TemplateMethod)模式属于行为型模式的一种。模板方法模式定义了一个操作中的算法骨架,并将一些步骤延迟到子类中实现。模板方法模式的核心思想是:父类定义骨架,子类实现某些细节。模板方法模式允许子类在不改变算法结构的情况下,重新定义算法中的某些特定步骤。Java标准库有很多模板方法模式的应用。比如集合类中的AbstractList、AbstractQueuedSynchronize
[开题报告]Springboot高校图书管理系统设计与实现lq627计算机毕业设计
卓越计算机毕设
课程设计
本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。开题报告研究背景:随着高校图书馆的规模不断扩大和信息化程度的提高,传统的手工管理方式已经无法满足日益增长的图书馆资源管理需求。图书管理系统的设计与实现成为了解决这一问题的关键。通过引入计算机技术和信息管理系统,可以提高图书馆的管理效率和服务质量,为读者提供更便捷、高效的借阅体验。研究意义:图书管理系统
【重温设计模式】访问者模式及其Java示例
万猫学社
重温设计模式及其Java实现 设计模式 访问者模式 java
访问者模式的基本概念访问者模式,一种行为型设计模式,其基本定义是:允许一个或者多个操作应用到一组对象上,解耦操作和对象的具体类,使得操作的添加可以独立于对象的类结构变化。在面向对象编程中,访问者模式的重要性不言而喻。它将数据操作和数据结构分离,使得在不改变数据结构的前提下,可以添加新的操作,从而增强了系统的灵活性和可扩展性。在访问者模式中,数据结构是稳定的,而操作是易变的。这就像一座博物馆,展品(
COMP 315: Cloud Computing for E-Commerce
W_X_99515681
开发语言
Assignment1:JavascriptCOMP315:CloudComputingforE-CommerceFebruary20251IntroductionAcommontaskwhenbackendprogrammingisdatacleaning,whichistheprocessoftakinganinitialdatasetthatmaycontainerroneousorinco
编程内容简述!
恶霸不委屈
开发语言 青少年编程 汇编 java python
编程是指通过计算机语言来开发软件、程序和应用的过程,通常通过编写一系列的指令,来让计算机完成特定的任务。编程可以涉及多个领域和技术,以下是一些主要的编程内容:1.编程语言编程语言是程序员与计算机进行沟通的桥梁,不同的编程语言适用于不同的任务。常见的编程语言有:Python:简单易学,适用于数据分析、人工智能、网页开发等。JavaScript:网页开发中不可或缺的语言,用于动态网页和前端开发。Jav
【Docker系列四】Docker 网络
Kwan的解忧杂货铺@新空间代码工作室
s4 Docker系列 docker 网络 容器
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术,jvm,并发编程redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,
web报表工具FineReport常见的数据集报错错误代码和解释
老A不折腾
web报表 finereport 代码 可视化工具
在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下。
NS-war-remote=错误代码\:1117 压缩部署不支持远程设计
NS_LayerReport_MultiDs=错误代码
Java的WeakReference与WeakHashMap
bylijinnan
java 弱引用
首先看看 WeakReference
wiki 上 Weak reference 的一个例子:
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new Wea
Linux——(hostname)主机名与ip的映射
eksliang
linux hostname
一、 什么是主机名
无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 linuxsir.org 这样的;
主机名是用于什么的呢?
答:在一个局域网中,每台机器都有一个主
oracle 常用技巧
18289753290
oracle常用技巧 ①复制表结构和数据 create table temp_clientloginUser as select distinct userid from tbusrtloginlog ②仅复制数据 如果表结构一样 insert into mytable select * &nb
使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException
酷的飞上天空
exception
有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近访问压力增大后台tomcat的日志里面频繁出现
com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResou
IT系统分析师如何学习大数据
蓝儿唯美
大数据
我是一名从事大数据项目的IT系统分析师。在深入这个项目前需要了解些什么呢?学习大数据的最佳方法就是先从了解信息系统是如何工作着手,尤其是数据库和基础设施。同样在开始前还需要了解大数据工具,如Cloudera、Hadoop、Spark、Hive、Pig、Flume、Sqoop与Mesos。系 统分析师需要明白如何组织、管理和保护数据。在市面上有几十款数据管理产品可以用于管理数据。你的大数据数据库可能
spring学习——简介
a-john
spring
Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发,从简单性,可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。其主要特征是依赖注入、AOP、持久化、事务、SpringMVC以及Acegi Security
为了降低Java开发的复杂性,
自定义颜色的xml文件
aijuans
xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#FFFFFF</color> <color name="black">#000000</color> &
运营到底是做什么的?
aoyouzi
运营到底是做什么的?
文章来源:夏叔叔(微信号:woshixiashushu),欢迎大家关注!很久没有动笔写点东西,近些日子,由于爱狗团产品上线,不断面试,经常会被问道一个问题。问:爱狗团的运营主要做什么?答:带着用户一起嗨。为什么是带着用户玩起来呢?究竟什么是运营?运营到底是做什么的?那么,我们先来回答一个更简单的问题——互联网公司对运营考核什么?以爱狗团为例,绝大部分的移动互联网公司,对运营部门的考核分为三块——用
js面向对象类和对象
百合不是茶
js 面向对象 函数创建类和对象
接触js已经有几个月了,但是对js的面向对象的一些概念根本就是模糊的,js是一种面向对象的语言 但又不像java一样有class,js不是严格的面向对象语言 ,js在java web开发的地位和java不相上下 ,其中web的数据的反馈现在主流的使用json,json的语法和js的类和属性的创建相似
下面介绍一些js的类和对象的创建的技术
一:类和对
web.xml之资源管理对象配置 resource-env-ref
bijian1013
java web.xml servlet
resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联
<resource-env-ref>
<resource-env-ref-name>资源名</resource-env-ref-name>
<resource-env-ref-type>查找资源时返回的资源类
Create a composite component with a custom namespace
sunjing
https://weblogs.java.net/blog/mriem/archive/2013/11/22/jsf-tip-45-create-composite-component-custom-namespace
When you developed a composite component the namespace you would be seeing would
【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter
bit1129
mongodb
一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does
not have a copy of data set and
cannot become a primary. Replica sets may have arbiters to add a
Javascript开发笔记
白糖_
JavaScript
获取iframe内的元素
通常我们使用window.frames["frameId"].document.getElementById("divId").innerHTML这样的形式来获取iframe内的元素,这种写法在IE、safari、chrome下都是通过的,唯独在fireforx下不通过。其实jquery的contents方法提供了对if
Web浏览器Chrome打开一段时间后,运行alert无效
bozch
Web chorme alert 无效
今天在开发的时候,突然间发现alert在chrome浏览器就没法弹出了,很是怪异。
试了试其他浏览器,发现都是没有问题的。
开始想以为是chorme浏览器有啥机制导致的,就开始尝试各种代码让alert出来。尝试结果是仍然没有显示出来。
这样开发的结果,如果客户在使用的时候没有提示,那会带来致命的体验。哎,没啥办法了 就关闭浏览器重启。
结果就好了,这也太怪异了。难道是cho
编程之美-高效地安排会议 图着色问题 贪心算法
bylijinnan
编程之美
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class GraphColoringProblem {
/**编程之美 高效地安排会议 图着色问题 贪心算法
* 假设要用很多个教室对一组
机器学习相关概念和开发工具
chenbowen00
算法 matlab 机器学习
基本概念:
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
开发工具
M
[宇宙经济学]关于在太空建立永久定居点的可能性
comsci
经济
大家都知道,地球上的房地产都比较昂贵,而且土地证经常会因为新的政府的意志而变幻文本格式........
所以,在地球议会尚不具有在太空行使法律和权力的力量之前,我们外太阳系统的友好联盟可以考虑在地月系的某些引力平衡点上面,修建规模较大的定居点
oracle 11g database control 证书错误
daizj
oracle 证书错误 oracle 11G 安装
oracle 11g database control 证书错误
win7 安装完oracle11后打开 Database control 后,会打开em管理页面,提示证书错误,点“继续浏览此网站”,还是会继续停留在证书错误页面
解决办法:
是 KB2661254 这个更新补丁引起的,它限制了 RSA 密钥位长度少于 1024 位的证书的使用。具体可以看微软官方公告:
Java I/O之用FilenameFilter实现根据文件扩展名删除文件
游其是你
FilenameFilter
在Java中,你可以通过实现FilenameFilter类并重写accept(File dir, String name) 方法实现文件过滤功能。
在这个例子中,我们向你展示在“c:\\folder”路径下列出所有“.txt”格式的文件并删除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例
dcj3sjt126com
c array
# include <stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
//a 是数组的名字 5是表示数组元素的个数,并且这五个元素分别用a[0], a[1]...a[4]
int i;
for (i=0; i<5; ++i)
printf("%d\n",
PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引
dcj3sjt126com
primary
PRIMARY, INDEX, UNIQUE 这3种是一类PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表有下列字段:会员编号 INT会员姓名
java集合辅助类 Collections、Arrays
shuizhaosi888
Collections Arrays HashCode
Arrays、Collections
1 )数组集合之间转换
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
a)Arrays.asL
Spring Security(10)——退出登录logout
234390216
logout Spring Security 退出登录 logout-url LogoutFilter
要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain。当我们指定了http元素的auto-config属性为true时logout定义是会自动配置的,此时我们默认退出登录的URL为“/j_spring_secu
透过源码学前端 之 Backbone 三 Model
逐行分析JS源代码
backbone 源码分析 js学习
Backbone 分析第三部分 Model
概述: Model 提供了数据存储,将数据以JSON的形式保存在 Model的 attributes里,
但重点功能在于其提供了一套功能强大,使用简单的存、取、删、改数据方法,并在不同的操作里加了相应的监听事件,
如每次修改添加里都会触发 change,这在据模型变动来修改视图时很常用,并且与collection建立了关联。
SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter
乒乓狂魔
springMVC
这一篇文章主要介绍下HttpMessageConverter整个注册过程包含自定义的HttpMessageConverter,然后对一些HttpMessageConverter进行具体介绍。
HttpMessageConverter接口介绍:
public interface HttpMessageConverter<T> {
/**
* Indicate
分布式基础知识和算法理论
bluky999
算法 zookeeper 分布式 一致性哈希 paxos
分布式基础知识和算法理论
BY
[email protected]
本文永久链接:http://nodex.iteye.com/blog/2103218
在大数据的背景下,不管是做存储,做搜索,做数据分析,或者做产品或服务本身,面向互联网和移动互联网用户,已经不可避免地要面对分布式环境。笔者在此收录一些分布式相关的基础知识和算法理论介绍,在完善自我知识体系的同
Android Studio的.gitignore以及gitignore无效的解决
bell0901
android gitignore
github上.gitignore模板合集,里面有各种.gitignore : https://github.com/github/gitignore
自己用的Android Studio下项目的.gitignore文件,对github上的android.gitignore添加了
# OSX files //mac os下 .DS_Store
成为高级程序员的10个步骤
tomcat_oracle
编程
What
软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。
Why
得到更多的报酬!因为你的薪水会随着你水平的提高而增加
提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进
历经更大的挑战。随着你的成长,各种影响力也会提高。
mongdb在linux下的安装
xtuhcy
mongodb linux
一、查询linux版本号:
lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noa