RandomAccessFile&IO流&排序&方法论
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流&排序&方法论的更多相关文章
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- IO流 简介 总结 API 案例 MD
目录 IO 流 简介 关闭流的正确方式 关闭流的封装方法 InputStream 转 String 的方式 转换流 InputStreamReader OutputStreamWriter 测试代码 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- IO流
流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java IO流 之 其他流
一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一). public class ByteArrayInputStream extends ...
- 二十一、Java基础--------IO流之综合案例分析
前三篇文章详细介绍了IO流体系所涉及的重点内容,为了帮助理解与学习,本片博客主要是分析一个与IO操作相关的题目. 例1:在我们观看视频时经常要关注的就是视频的时间长度,在学习了IO操作之后,就可以自己 ...
- Java IO流
File类 ·java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 ·File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入 ...
随机推荐
- 十个你需要在 PHP 7 中避免的坑
1. 不要使用 mysql_ 类函数 终于,你不用再看到建议不要使用 mysql_ 函数的提示了.因为 PHP 7 从核心上完全移除了它们,这意味着请你移步至更好的 mysqli_ 类函数,或者更灵活 ...
- Tomcat8.0 配置环境
(1)首先安装JDk 下载jdk进行安装后进行配置环境 新增一个Java_Home的变量复制本地安装目录的路径:eg:C:\Program Files (x86)\Java\jdk1.8.0_141\ ...
- python 评论楼
评论楼 从数据库中取出本篇博客的所有评论使用python语句将评论整理成具有层级关系的列表 typename=request.POST.get('typename') comment_list = m ...
- sqlalchemy通过ssh连接远程mysql服务器
首先需要一个模块sshtunnel,如果没有直接pip install sshtunnel from sshtunnel import SSHTunnelForwarder from sqlalche ...
- Hive函数:CUME_DIST,PERCENT_RANK
参考自:大数据田地http://lxw1234.com/archives/2015/04/185.htm 数据准备: d1,user1, d1,user2, d1,user3, d2,user4, d ...
- 编写CGI程序步骤
CGI common gateway interface 可以让一个客户端,从网页浏览器向服务器请求数据, 这是描述客户端和服务器程序之间传输数据的一种标准. CGI是运行在服务器上的程序,提供同客户 ...
- 图片处理之 Base64
网页上的图片资源如果采用 http 形式的 url 的话都会额外发送一次请求,网页发送的 http 请求次数越多,会造成页面加载速度越慢.而采用Base64格式的编码,将图片转化为字符串后,图片文件会 ...
- 手把手教你实现boost::bind
前言 boost::bind操作想必大家都使用过,它特别神奇,能够绑定函数与参数,绑定后能够改变参数数量,并且还可以使用占位符.它可以绑定普通函数也可以绑定类成员函数.好多小伙伴试图看过boost:: ...
- css3 box-shadow阴影(外阴影与外发光)
基础说明: 外阴影:box-shadow: X轴 Y轴 Rpx color; 属性说明(顺序依次对应): 阴影的X轴(可以使用负值) 阴影的Y轴(可以使用负值) 阴影 ...
- mybatis学习成长之路(一)
从小白开始学习,希望自己学习的过程可以帮助更多需要的人,参考网址:https://www.cnblogs.com/ysocean/p/7237499.html 1.mybatis的jar包下载地址:h ...