RandomAccessFile&IO流&排序&方法论

我们总觉得历史是极其遥远的东西,与我们并无关联,又觉得历史隐藏在图书馆的旧书之中。

然而,我们每个人都有真真切切的历史。那便是每日的历史。今天自己做了些什么,又是怎么做的,都会成为你历史中的一页。

是畏缩不前、碌碌无为,还是勇猛挑战,花心思比昨天做的更好。每种态度,都会写就属于你的历史。

——尼采 《快乐的知识》

RandomAccessFile

以下是昨天对RandomAccessFile的具体练习:

 package Zhang;

 import java.io.File;

 import java.io.IOException;

 import java.io.RandomAccessFile;

 import java.util.Arrays;

 public class RandomAccessFileTest {

       public static void main(String[] args) throws IOException {

             File demo=new File("demo");//相对路径

             if(!demo.exists()) demo.mkdir(); //如果目录不存在创建目录

             File file=new File(demo,"raf.dat");

             if(!file.exists()) file.createNewFile();//如果文件不存在,创建文件

             RandomAccessFile raf=new RandomAccessFile(file,"rw");

             //指针的位置

             System.out.println(raf.getFilePointer());

             raf.write('A');//只写了一个字节

             System.out.println(raf.getFilePointer());

             raf.write('B');

             int i=0x7fffffff;

             //底层的处理方法用write方法每次只能写一个字节,如果要把i写进去就要写四次

             raf.write(i>>>24);//右移24,把高八位写进去。>>>无符号右移

             raf.write(i>>>16);

             raf.write(i>>>8);

             raf.write(i);

             System.out.println(raf.getFilePointer());

             //其实可以直接写一个int

             raf.writeInt(i);//此处可以查看writeInt()的实现方法,与上面的基本一样。

             String s="中"; 

             byte[] gbk=s.getBytes("gbk");//gbk的中文占两个字节

             raf.write(gbk);

             System.out.println(raf.getFilePointer());//查看此时指针的位置

             System.out.println(raf.length());//查看文件的长度

             //读文件,必须把指针移动到文件的开始位置

             raf.seek(0);

             //一次性读取,把文件的内容都读取到字节数组中

             byte[] buf=new byte[(int)raf.length()];//字节数组的长度与文件的长度一致

             raf.read(buf);//读取到字节数组当中

             System.out.println(Arrays.toString(buf));

             String s1=new String(buf);//把字节数组构造成为字符串

             System.out.println(s1);

             //以十六进制的形式输出

             for(byte b:buf){

                   System.out.print(Integer.toHexString(b&0xff)+" ");

             }

             byte [] b=new byte[2];

             raf.seek(10);

             raf.read(b,0,2);

             String content=new String(b,"gbk");

             System.out.println(content);//输出 “中”

             raf.close();//关闭

       }

 }

IO流

下面是对明天即将进一步学习IO流做的准备:

IO流(输入流、输出流)

字节流、字符流(也就是以字节为单位,或者以字符为单位)

字节流:InputStream、OutputStream两个抽象类

InputStream抽象了应用程序读取数据的方式

OutputStream抽象了应用程序写出数据的方式

EOF=End 读到-1就读到结尾

重要的方法。in与out视为对象

输入流 键盘是一个输入

输入流基本方法:

lint b=in.read();读取一个byte到流,b的底8位

lin.read(byte[] buf);读取一个byte数组

lin.read(byte buf,int start,int size);从byte数组的start位置读取长度为size的字节

输出流基本方法:

lout.write(int b)写出一个byte到流,b的底八位。

lout.write(byte[] buf)将buf字节数组都写到流

lout.write(byte[] buf,int start,int size)字节数组buf从start位置开始写size长度的字节到流。

InputStream、OutputStream两个抽象类的第一组子类

FileInputStream------->具体实现了在文件上读取数据

数组排序

今天课上我简单的练习了数组的常用排序:

 package Zhang;

 import java.util.Arrays;

 public class ArrayTest {

      /**

      * 冒泡排序

      * @param arrays 数组

      * @author zhang

      * */

      public static void sort(int [] arrays){

           for(int i=1;i<arrays.length;i++){

                for(int j=0;j<arrays.length-i;j++){

                     if(arrays[j]>arrays[j+1]){

                          int tmp=arrays[j];

                          arrays[j]=arrays[j+1];

                          arrays[j+1]=tmp;

                     }

                }

           }

      }

      /**

      * 直接排序

      * @param arrays 数组

      * @author zhang

      * */

      public static void sort2(int [] arrays){

           for(int i=0;i<arrays.length-1;i++){

                for(int j=i+1;j<arrays.length;j++){

                     if(arrays[i]<arrays[j]){

                          int tmp=arrays[i];

                          arrays[i]=arrays[j];

                          arrays[j]=tmp;

                     }

                }

           }

      }

      /**

      *  快速排序

      * @param a 数组

      * @param low开始的位置

      * @param high结束的位置

      * @author zhang

      *

      * */

      public static void sort3(int[] a,int low,int high){

           if(low>=high) return;

           int first=low;

           int last=high;

           int key=a[first];

           while(first<last){

                while(first<last&&a[last]>=key){

                     last--;

                }

                a[first]=a[last];

                while(first<last&&a[first]<=key){

                     first++;

                }

                a[last]=a[first];

           }

           a[first]=key;

           sort3(a,low,first-1);//当这个函数递归结束时下面的high是上一个函数的first-1.所以low与high不能写成0与a.length-1。

           sort3(a,first+1,high);

      }

      public static void main(String[] args) {

           int a[]={8,4,3,2,7,5,4,9,67,89,32,7,0,99,12};

           sort3(a,0,a.length-1);

           System.out.println(Arrays.toString(a));

           Arrays.fill(a,100);

           System.out.println(Arrays.toString(a));

           Arrays.fill(a,3,6,200);

           System.out.println(Arrays.toString(a));    

      }

 }

更多的内容如果以后用的到,自己就去查阅官方说明文档。

方法论

学 习一个新知识,首先要对这个新的知识百度一下或者其他方式了解,这种新知识是为了解决什么问题而出现的。然后是知道些这种知识技术解决问题的原理,使用这 种知识的规则以及常用技术与思想。通过网上视频教程简单入门,深入下去是找权威书籍与官方的说明文档去阅读。之间要进行必要的练习,最后在实际的应用中灵 活运用。复杂的问题也是由简单的组成的,仔细分析他们是怎么系统的组成在一起的,互相之间是怎么起作用的,在注重基础的同时也不要在舒适区停留,不断的向 新的内容进军旧的知识才能更牢固和发挥力量。探索学习自己未知的是不容易的,但那也是走出没有新鲜感的唯一途径。对于卓越的人,自己不被理解是别人的问 题,对于最求卓越的自己,不能或不去理解卓越的人的成果是件悲哀的事。不进步不痛快!以我现在的时间和我根据自己的学习经历总结的学习方法,我应该下一步 做什么呢?先把前几天审视思考总结出来的问题在解决吧,问题是复杂的,自己就不要想太多给自己添乱了。

欲多则心散,心散则志衰,志衰则思不达。——《鬼谷子》

对的,当考虑整体的时候就不要深陷细节,专注细节的时候就不要过多分心其他。

2016-10-10

RandomAccessFile&IO流&排序&方法论的更多相关文章

  1. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  2. IO流 简介 总结 API 案例 MD

    目录 IO 流 简介 关闭流的正确方式 关闭流的封装方法 InputStream 转 String 的方式 转换流 InputStreamReader OutputStreamWriter 测试代码 ...

  3. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. IO流

    流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...

  6. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. java IO流 之 其他流

    一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一).   public class ByteArrayInputStream extends ...

  8. 二十一、Java基础--------IO流之综合案例分析

    前三篇文章详细介绍了IO流体系所涉及的重点内容,为了帮助理解与学习,本片博客主要是分析一个与IO操作相关的题目. 例1:在我们观看视频时经常要关注的就是视频的时间长度,在学习了IO操作之后,就可以自己 ...

  9. Java IO流

    File类 ·java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 ·File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入 ...

随机推荐

  1. C++中友元

    一.友元分为两种 1.友元函数 2.友元类 二.解析比较好的博客:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.htm ...

  2. python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法

    数据结构可以说是编程的内功心法,掌握好数据结构真的非常重要.目前基本上流行的数据结构都是c和c++版本的,我最近在学习python,尝试着用python实现了二叉树的基本操作.写下一篇博文,总结一下, ...

  3. 华为防火墙USG5500-企业双ISP出口

    需求:(1)技术部IP地址自动获取,网段为192.168.10.0/24,该部门访问Internet的报文正常情况下流入链路ISP1. 总经办IP地址自动获取,网段为192.168.20.0/24,该 ...

  4. Animations in UWP Community Toolkit - Overview

    概述 UWP Community Toolkit  中有一个 Animations 的集合,它们可以帮助开发者实现很多的动画,本篇我们先来看一下 Animations 的功能都有哪些,再后面会针对每一 ...

  5. 计算机网络-TCP之三次握手/四次握手

    .概念 .特点 .背景知识补充 .三次握手 .四次握手 .其他补充 1.概念 TCP(Transmission Control Protocol,传输控制协议)是 在不可靠的IP层之上实现的可靠的数据 ...

  6. 两个css之间的切换

    需求: 头部两个按钮 两种样式之间的切换 解决办法: 结合JQ  三目运算 来处理 第一步: 把需要切换的样式设置为样式里背景,这样做的目的为了避免 js里出现过多 css代码 二来这样会显得更加的清 ...

  7. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour

    继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...

  8. python的变量与赋值

    1.变量的命名规则 变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错.下面总结了一下变量的命名规则: 1.不 ...

  9. (MariaDB/MySQL)之DML(1):数据插入

    本文目录: 1.insert和replace插入数据 1.1 insert into values() 1.2 insert into set 1.3 insert into select_state ...

  10. [Codeforces 176B]Word Cut

    Description 题库链接 给你两个字符串 \(S\) 和 \(T\) ,准许你 \(k\) 次操作,每次将字符串左右分成两个非空的部分,再交换位置,问你有多少种不同的操作方法将 \(S\) 串 ...