Java核心编程(泛型、io流、字符编码)

泛型

 

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

泛型的使用:

 返回数据:

       1、状态码

      2、状态描述

      3、响应数据

下面是定义泛型方法的规则:

  • 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。
  • 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
  • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  • 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。

IO流

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出

 

Java IO流中有以下的五个类:

  1. Flie类

java中我们通过java.io.File类实现对文件的基本属性进行操作,包括文件属性读取,文件创建,文件删除,文件添加等等。File是一个类,那么在使用的时候就需要创建对象,但是File类的实例是不可变的,也就是说,一旦创建,由File对象表示的抽象路径名将永远不会改变,也就是说利用构造方法,指定路径名、文件名等来构造File类的对象,之后调用该对象的createNewFile()方法就可以创建出相应的文件。

 File类的直接父类是Object类。一个File类的对象,表示了磁盘上的文件或目录。如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

在不同的计算机操作系统中,路径分割符号是不同的。windows系统的路径分隔符【\】与Unix系统的路径分隔符【/】不一样

删除目录:

File f1 = new File("C:\\WorkAndStudy\\java\\a\\c");

boolean b1 = f1.delete();

注意:删除目录时,目录必须为空,否则删除失败

创建文件之前一定要保存目录存在,否则创建文件失败

也可使用递归方法删除

可以使用exists()关键字判断文件是否存在

(1)FileInputStream: 文件字节输入流

 FileInputStream从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。

 FileInputStream用于读取诸如图像数据的原始字节流。 要阅读字符流,请考虑使用FileReader 。

 构造方法

 FileInputStream(File file)

      通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

 FileInputStream(FileDescriptor fdObj)

      通过使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中的实际文件的现有连接。

 FileInputStream(String name)

       通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

文件字节输出流 FileOutputStream

 文件输出流是用于将数据写入File或FileDescriptor的输出流。

 文件是否可用或可能被创建取决于底层平台。 特别是某些平台允许一次只能打开一个文件来写入一个

(2) FileOutputStream (或其他文件写入对象)。 在这种情况下,如果所涉及的文件已经打开,

 则此类中的构造函数将失败。

 FileOutputStream用于写入诸如图像数据的原始字节流。 要编写字符流,请考虑使用FileWriter 。

 构造函数:

 FileOutputStream(File file)

      创建文件输出流以写入由指定的 File对象表示的文件。

 FileOutputStream(FileDescriptor fdObj)

      创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。

 FileOutputStream(File file, boolean append)

     创建文件输出流以写入由指定的 File对象表示的文件。

     参数

           file - 要打开的文件进行写入。

           append - 如果是 true ,则字节将写入文件的末尾而不是开头

  FileOutputStream(String name)

      创建文件输出流以指定的名称写入文件。

  FileOutputStream(String name, boolean append)

      创建文件输出流以指定的名称写入文件。

      参数

         file - 要打开的文件进行写入。

         append - 如果是 true ,则字节将写入文件的末尾而不是开头

  1. InputStream类

java.io.InputStream类是所有Java IO输入流的基类,它是以字节为单位的输出流。

 BufferedInputStream为另一个输入流添加了功能,即缓冲输入并支持mark和reset方法的功能。

 创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区

 将根据需要从所包含的输入流中重新填充,一次很多字节。 mark操作会记住输入流中的一个点,并且

 reset操作会导致从最近的mark操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。

 构造方法    Constructor 描述

 BufferedInputStream(InputStream in)

       创建一个 BufferedInputStream并保存其参数,输入流 in供以后使用。

  BufferedInputStream(InputStream in, int size)

       创建具有指定缓冲区大小的 BufferedInputStream ,并保存其参数,输入流 in供以后使用。

  1. OutputStream类

OutputStream类是Java IO API中所有输出流的基类。子类包括BufferedOutputStream,FileOutputStream等等。

OutputStream.write()将数据写入输出流,准备输出到各种介质
OutputStream.close()关闭并释放输出流资源
OutputStream.flush()清空输出流

BufferedOutputStream:

该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,

  而不必为写入的每个字节导致底层系统的调用。

 构造方法摘要

 构造方法    Constructor 描述

 BufferedOutputStream(OutputStream out)

      创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

 BufferedOutputStream(OutputStream out, int size)

      创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

  1. Reader类

Reader是一个抽象类,它是以字符为单位的输入流的公共父类。

FileReader:读取文件

BufferedReader是缓冲字符输入流,它继承于Reader,它的作用是为其他字符输入流添加一些缓冲功能。

  1. Writer类

Writer类是Java IO中所有Writer的基类。子类包括BufferedWriter和PrintWriter等等。

PrintWriter.write()写入数据

java中PrintWriter.write()其实和print方法基本一致,print可以格式化输出,write则不可以,所以一般写数据用PrintWriter.print()

BufferedWriter 类主要用于辅助其他字符输出流,它同样带有缓冲区,可以先将一批数据写入缓冲区,

  当缓冲区满了以后,再将缓冲区的数据一次性写到字符输出流,其目的是为了提高数据的写效率。

  1. CopyBisAndBos

用于高效复制文件

7、高级流(字符流)\转换流

  InputStreamReader是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符。

 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

 每个调用InputStreamReader的read()方法之一可能会导致从底层字节输入流读取一个或多个字节。

 为了使字节有效地转换为字符,可以从底层流读取比满足当前读取操作所需的更多字节。

 构造方法    Constructor 描述

 InputStreamReader(InputStream in)

      创建一个使用默认字符集的InputStreamReader。

 InputStreamReader(InputStream in, String charsetName)

      创建一个使用命名字符集的InputStreamReader。

 InputStreamReader(InputStream in, Charset cs)

      创建一个使用给定字符集的InputStreamReader。

 InputStreamReader(InputStream in, CharsetDecoder dec)

      创建一个使用给定字符集解码器的InputStreamReader。

 为了最大的效率,请考虑在BufferedReader中包装一个InputStreamReader。

字符编码

字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。

GBK兼容GBK 2312

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值