import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.zip.*;

public class Fragment {
    //Java核心技术 卷二 第十版 2.1.1节
    private void f001() throws IOException {
        FileInputStream in = new FileInputStream("temp.tmp");
        byte[] buffer = new byte[100];

        //这种编码下,不会发生阻塞
        int bytesAvailable = in.available();
        if (bytesAvailable > 0) {
            in.read(buffer);
        }
    }

    //Java核心技术 卷二 第十版 2.1.3节
    private void f002() throws IOException {
        //得到用户工作目录
        System.getProperty("user.dir");

        //得到文件分割符
        System.getProperty("line.separator");
        System.out.println(File.separator);

        /*
            有时当多个输入流链接在一起时,你需要跟踪各个中介输入流。例如,当
            读输入时,你经常需要预览下一个字节,以了解它是否是你想要的值。
            Java通过PushbackInputStream提供这项功能。
                ——我觉得这个案例并没有体现跟踪各个中介流的功能
         */
        PushbackInputStream pbin = new PushbackInputStream(
                new BufferedInputStream(
                        new FileInputStream("temp.tmp")));

        int b = pbin.read();    //预读下一个字符
        pbin.unread(b);         //发现b不是自己需要的,给搁回去

        /*
            如果又想要预读数据的功能,又想要读数字的功能;
                ——这个地方很狗,DataInputStream没有unread()方法,所以说,你不能
                用in读一个数字,发现不是自己要的,又给搁回去。你还得先用pbin2读几个字
                节,自己转换一下,发现不是自己想要的,又给搁回去,可能我这块理解的有问
                题吧
         */
        PushbackInputStream pbin2;
        DataInputStream in = new DataInputStream(
                pbin2 = new PushbackInputStream(
                        new BufferedInputStream(
                                new FileInputStream("temp.tmp"))));

    }

    //Java核心技术 卷二 第十版 2.2节
    private void f003() {
        /*
            OutputStreamWriter类将用选定的字符编码方式,把Unicode码元的输出流转换为字节流
            InputStreamReader类将包含字节(用某种字符编码方式表示的字符)的输入流转换为可以产生Unicode码元的读入器
         */
        Reader in1 = new InputStreamReader(System.in);
        Reader in2 = new InputStreamReader(System.in,StandardCharsets.UTF_8);
    }

    //Java核心技术 卷二 第十版 2.2.1节
    private void f004() throws IOException {
        //书中这块代码给错了~PrintWriter没有传入一个流和字符集的构造函数
        PrintWriter out1 = new PrintWriter("temp.tmp","UTF-8");
        PrintWriter out2 = new PrintWriter(
                new FileOutputStream("temp.tmp"));
    }

    //Java核心技术 卷二 第十版 2.2.2节
    private void f005() {

        /*
            BufferedReader类的典型用法
            区别与字符类的流的read()方法,该方法用对-1的判定来结束循环
         */
        InputStream inputStream = new ByteArrayInputStream(new byte[100]);

        try(BufferedReader in = new BufferedReader(
                new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {

            String line;
            while ((line = in.readLine()) != null) {
                //do something with line
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //Java核心技术 卷二 第十版 2.2.4节
    private void f006() {
        //得到平台默认编码方式,可以传给某个方法~
        Charset.defaultCharset();

        //得到所有可用的Charset
        Charset.availableCharsets();

        //为了获得另一种编码方式的Charset
        Charset shiftJIS = Charset.forName("Shift-JIS");
    }

    //Java核心技术 卷二 第十版 2.3.1节
    private void f007() {
        /*
            DataOutputStream中writeUTF()方法使用的是修订版的8为Unicode。这主要是为了向
            后兼容在Unicode还没有超过16位时构建的虚拟机。因为还没有其他方法会使用这种修订版
            的UTF-8,所以我们应该只在写出用于Java虚拟机的字符串时才使用writeUTF()方法。其
            他时候,我们应该使用writeChars
         */
    }

    //Java核心技术 卷二 第十版 2.3.2节
    private void f008() throws IOException {
        /*
            需求:我们现在要剖析一个将雇员记录记录到随机访问文件中的示例程序,其中每条记录都
            拥有相同的大小,这样我们可以很容易的读入任何记录。假设你希望将文件指针置于第三条
            记录处,那么你只需要将文件指针置于恰当的字节位置,然后就可以开始读入了。
         */
        RandomAccessFile in = new RandomAccessFile("temp.tmp","rw");
        long n = 3;
        int RECORD_SIZE=10;

        in.seek((n-1)*RECORD_SIZE);
        in.writeInt(1000);

    }

    //Java核心技术 卷二 第十版 2.3.3节
    private void f009() throws IOException {
        //典型的通读ZIP文件的代码序列

        /*
            额,很尴尬,这段代码根本就是错误的,ZipInputStream根本就没有一个getInputStream(ZipEntry enter)的方法

        ZipInputStream zin= new ZipInputStream(
                new FileInputStream("temo.tmp"));
        ZipEntry entry;
        while((entry=zin.getNextEntry())!=null){
            InputStream in = entry.getInputStream(entry);
            //read the constents of in
            zin.closeEntry();
        }
        */

        /*
            我从Java编程思想中拷贝过来的代码,原来的代码我已经测试过了,现在的代码,我只是做为一种整理
         */
        FileInputStream fi = new FileInputStream("test.zip");
        CheckedInputStream csumi = new CheckedInputStream(fi, new Adler32());

        ZipInputStream in = new ZipInputStream(csumi);
        BufferedInputStream bis = new BufferedInputStream(in);

        ZipEntry ze;
        while ((ze = in.getNextEntry()) != null) {

            //read the constents of bis
            in.closeEntry();
        }
        bis.close();
    }

    //Java核心技术 卷二 第十版 2.3.3节
    private void f010() throws IOException {
        //典型的对文件进行压缩的过程
        String[] files = new String[10];

        FileOutputStream fout = new FileOutputStream("test.zip");
        ZipOutputStream zout = new ZipOutputStream(fout);
        for(String filename : files)
        {
            ZipEntry ze = new ZipEntry(filename);
            zout.putNextEntry(ze);
            //send data to zout
            zout.closeEntry();
        }
        zout.close();
    }

}

Java核心技术中的程序片段的更多相关文章

  1. Java语言中的程序流程控制

    (1. 流程控制 有三种基本技术可以改变程序的控制流程: A.调用方法 :将导致控制流程离开当前方法,转移到被调用的方法. B.选择  :   a. if / else 语句 b. switch语句 ...

  2. java核心技术(第十版卷一)笔记(纯干货!)

    这是我读过的第三本关于java基础的书.第一本<<java从入门到精通>>这本书让我灵识初开.第二本<<java敏捷开发>>这本书则是有一次被一位师傅批 ...

  3. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  4. 20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  5. Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 ? 1 2 String a = String.valueOf(2);   //integer to numer ...

  6. Java开发中程序和代码性能优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  7. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

  8. Java中获得程序当前路径的4中方法

    Java中获得程序当前路径的4中方法: 在Application中: import java.util.*; public class TestUserDir { public static void ...

  9. 整理:20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

随机推荐

  1. Winform 点击TreeView控件节点的CheckBox不触发NodeMouseClick事件的做法

    private void Tv_areainfo_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (!e.Node. ...

  2. 十七 bootstrap-table tableExport 导出xlsx格式表格

    原文:十七 bootstrap-table tableExport 导出xlsx格式表格 在[十六.bootstrap-table javascript导出数据]中,打开导出的表格时,总会弹出一个提示 ...

  3. SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明

    原文:SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明 DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKF ...

  4. The specified type member 'IsLock' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

    var query = from C in objDb.GetDb<A>() join a in objDb.GetDb<B>().Where(m => m.Comput ...

  5. python中时间相关问题,仅作为笔记

    1.获取当前时间的两种方法: import datetime,timenow = time.strftime("%Y-%m-%d %H:%M:%S")print nownow = ...

  6. CREATE CSS3是一款在线集成众多CSS3功能的生成器,可以在线生成常用的CSS3效果

    CREATE CSS3是一款在线集成众多CSS3功能的生成器,可以在线生成常用的CSS3效果 CREATE CSS3 彩蛋爆料直击现场 CREATE CSS3是一款在线集成众多CSS3功能的生成器,可 ...

  7. python中的内置函数(bytearray)

    返回一个新的字节数组.bytearray类是range 0 < = x < 256的一个可变序列.它有大多数可变序列的常用方法,在可变序列类型中描述,以及大多数字节类型的方法,参见字节和B ...

  8. VS Code真机测试步骤

    VS Code真机测试步骤 前提:你的电脑跟你的手机是在同一个网络环境下.电脑连手机热点: 1. 在扩展里搜索live server,下载安装: 2. 打开cmd 命令窗口(快捷键是win+r): 输 ...

  9. 深入理解 Kafka 副本机制

    一.Kafka集群 二.副本机制         2.1 分区和副本         2.2 ISR机制         2.3 不完全的首领选举         2.4 最少同步副本         ...

  10. pip与conda的区别

    pip和conda到底有什么不一样? 今天看到我的foreman开始报错去询问才发现.我们的python包管理工具已经从pip整体迁移到了conda..最近的迁移真的非常多..前端也在迁移打包 跟着发 ...