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. C++没有库则寸步难行,有库则几乎可以做任何事情——Bjarne Stroustrupi

    "Without a good library, most interesting tasks are hard to do in C++; but given a good library ...

  2. SpringMVC核心架构的具体流程

    核心架构的具体流程步骤如下: 1.首先用户发送请求-->DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控 ...

  3. 快速开发平台 WebBuilder 8.4 发布

    WebBuilder是一款强大,全面和高效的应用开发和运行平台.基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用 ...

  4. Java的String类字符串的拆分

    在java编程中,有时候我们需要把一个字符串按照某个特定字符.字母等作为截点分割这个字符串, 这样我们就可以使用这个字符串的一部分或者把所有截取的内容保存到数组里等操作. public class S ...

  5. WebApp 安全风险与防护课堂(第二讲)开课了!

    本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在昨天的公开课中,由于参与的小伙伴们积极性和热情非常高,我们的讲师Carl ...

  6. 程序代写, CS代写, 代码代写, CS编程代写, java代写, python代写, c++/c代写, R代写, 算法代写, web代写

    互联网一线工程师程序代写 微信联系 当天完成 查看大牛简介特色: 学霸代写,按时交付,保证原创,7*24在线服务,可加急.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor ...

  7. Storm 学习之路(六)—— Storm项目三种打包方式对比分析

    一.简介 在将Storm Topology提交到服务器集群运行时,需要先将项目进行打包.本文主要对比分析各种打包方式,并将打包过程中需要注意的事项进行说明.主要打包方式有以下三种: 第一种:不加任何插 ...

  8. React Router 4.0 + webpack 实现组件按需加载

    网上关于React Router 4.0的按需加载文章有很多,大致的思路都一样,但是其实具体实现起来却要根据自己的实际情况来定,这里主要介绍一下我的实现方式. 主要方式是通过Route组件的rende ...

  9. mac下mysql的卸载和安装

    1. mysql的卸载 1 sudo rm /usr/local/mysql 2 sudo rm -rf /usr/local/mysql* 3 sudo rm -rf /Library/Startu ...

  10. vscode+vagrant+xdebug调试

    配置: { "name": "Listen for XDebug", "type": "php", "requ ...