java基础笔记(4)
二进制运算:
&的应用:清零、得到指定位的数;
|的应用:将指定位置取1;
^的应用:取反、保留原值;交换两个bian变量:A= A^B,B =A ^ B,A = A^B;(原理就是本身异或本身=0,本身异或0=本身)
<</>>:左/右移,注意负数时:负数是通过该数的绝对值进行反码再加一变成补码表示;得到负数的表示形式后再将其进行左右移操作,后减一再进行反码,再取相反数即可,因此左/右移是不会改变数本身的正负的,而无符号左右移是有可能改变正负的;
<<</>>>:无符号左/右移
java转换进制:
十进制转换为别的进制:Integer.toxxxxx(xxx);将10进制xxx转换为几进制;
别的进制转换为二进制:Integer.parseInt("xxx",yyy);将yyy进制,值为xxx的数转换为十进制;
二进制的应用,当我们跨平台且平台的底层不是同种语言编写的时候,就可以通过将数据转换为字节进行表示沟通;
数据类型转换为字节有大端法和小端法,
小端法则低位字节放到低地址端,即该值内存起始地址,高位字节放到高地址段;
大端法则低位字节放到高地址端,而高位字节放到低地址段;
IO的输入和输出
gbk编码,文字占用两个字节,字母占用一个字节;(项目默认)
utf-8编码,中文占用三个字节,字母占用一个字节;
utf-16be编码,中文和字母都是占用两个字节;
因此,如果把想把字节数组转化为字符串或数字,只有应用相应的编码转换才能进行正确转换而不会出现乱码;
我们平时在电脑上创建的文本文件,默认使用的是ansi编码,因此当我们用另外的编码保存时,再打开就会出现乱码;(注意:这里并不是指文本文件工具只认识ansi编码,它本身是认识很多编码的,比如你用一个已写好的utf-8文件用文本文件打开,它也是不会乱码,只是在用它新创建文件的时候会默认ansi编码)
java.io.File;File类只表现文件(目录)的信息(名称、大小)
File file = new File("E:\\javaio");访问E盘下的javaio;常用方法:
file.exists():判断文件是否存在;
file.mkdir()/file.mkdirs():如果文件不存在,则创造文件;/多级目录
file.delete();删除文件;
file.isDirectory();判断文件是否是目录;
file.isFile();判断文件是否是文件
file.getAbsolutePath();查找文件的绝对路径;
file.getName();查看文件的名字;
file.getParent();查看文件的父目录;
File类的过滤、遍历
file.list();返回的是字符串数组,是子的名称,不包含子目录下的内容;
如果要遍历子目录下的目录,我们返回的就不能是字符串数组,这样没法做递归;而要返回一个File对象;
File[] files = file.listFiles();返回直接子目录的文件对象数组;
通过遍历files,并判断files是否为目录,如是目录则再循环遍历,如是文件则打印输出,这样即可返回一个目录下所有子目录的子文件;
RandomAccessFile类是java提供对文件内容的访问,可读可写;支持随机访问,即访问文件的任意位置;
打开文件的模式有rw(读写)、r(只读)例:
RandomAccessFile raf = new RandomAccessFile(file,“rw”);
刚开始打开文件指针在开头;
常用的方法:
raf.write(int);只写一个字节(后8位);同时指针指向下一个位置;
int b = raf.read();只读一个字节
raf.getFilePointer();返回指针所在位置;
raf.seek(int);将指针放到所指位置;
文件读写完成后需关闭;
字节流
InputStream:抽象了应用程序读取数据的方式;
OutputStream:抽象了应用程序写出数据的方式;
EOF = End 读到-1就读到结尾
InputStream抽象类提供的方法:
int b =In.read():读取一个字节填充到int底八位中;
In.read(byte[] buf);读取数据填充到字节数组buf中
Inread(byte[] buf,int start,int size);读取数据填充到字节数组buf中,从buf字节数组的start位置开始,存放size长度的数据
在读取数据时,我们会把字节数组中的数读出来,但由于int是32位,我们写进字节数组中的只是int类中的底8位,所以可以通过&0xff对高24位进行清零;
OutputStream抽象类提供的方法:
Out.write(int b);写出一个byte到流,b的底八位;
Out.write(byte[] buf)将buf字节数组写入到流;
Out.write(byte[] buf , int start, int size);buf字节数组从start位置开始,写size长度的字节到流;
FileInputStream:InputStream的子类,具体实现了再文件上读取数据
需要注意的是FileOutputStream里的参数可以是(filename,[ture]);如果加了true,则表示是追加文件内容,如果没有参数true,则存在文件时,删除文件内容并添加新内容,如没文件,则创建文件并添加新内容;
DataOutputStream/DataInputStream:对流进行扩展;
传入的参数是outputStream类/InputStream类,提供了一些可以直接传入不同类型的方法,而不需先将其传为字节数组后再传入,如:
outputStream类
InputStream类
BufferedInputStream/BufferedOutputStream类:这两个流类为IO提供了带缓冲区的操作;
在文件的读写效率上,批量带缓冲区的读写是比较高效的;
字符流:
文本:java 的文本是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte、byte、byte的数据序列;
文本文件:是将文本(char)按某种编码方案序列化成byte的存储;
字符流(Reader类/ Writer类)
InputStreamReader类:完成了byte流解析为char流,按编码解析
OutputStreamWriter类:完成了char流到byte流,按编码解析
FileReader/FileWriter:直接创建了可用于字符流操作的对象,缺点是该类的创造函数并没有提供可以指定编码格式的方法,因此若要指定编码格式,还是需要用上述的InputStreamReader类;
字符流过滤器:
BufferedReader------->readline:一次读一行;
BufferedWriter/PrintWriter--------->写一行;
注意,这两个类中的方法都不能识别换行,所以读的时候是用println,而写的时候用了write后,在后面需调用newLine()方法进行换行操作;
PrintWriter类在创建上会比较简洁,它可以直接加文件名进行创建:
写操作用的是println()可直接进行写并换行:
对象的序列化和反序列化:将Object转换成byte序列,反之就叫做对象 的反序列化;
序列化流(ObjectOutputStream),字节过滤流,常用方法有:writeObject();
反序列化流(ObjectInputStream),常用方法:readObject();
序列化接口(Serializable)
对象必需实现话序列化接口,才能进行序列化;
反序列化:
若对象的元素用transient修饰,则不会进行jvm默认的序列化,不过是可以自己完成这个元素的序列化;
序列化子父类的关系:
对子类进行反序列化操作时,如果父类没有实现序列化接口,那么父类的构造函数会被调用;
java基础笔记(4)的更多相关文章
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- Java基础笔记1
java (开源,跨操作系统)j2ee jre java基础 javaoop java高级 JDK(JAVA developer Kitool): java开发工具 (开发人员使用) JRE(java ...
- Java基础笔记(一)——JDK、JRE、JVM
JDK.JRE和JVM三者的关系 Java程序执行过程 JVM(java virtual machine) 注:由于各种操作系统(windows.linux等)支持的指令集(二进制可执行代码)不同,程 ...
- Java基础笔记05-06-07-08
五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java基础笔记(一)
本文主要是我在看<疯狂Java讲义>时的读书笔记,阅读的比较仓促,就用 markdown 写了个概要. 第一章 Java概述 Java SE:(Java Platform, Standar ...
- JAVA基础笔记10-11-12-13-14
十.今日内容介绍 1.继承 2.抽象类 3.综合案例---员工类系列定义 01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在J ...
随机推荐
- 常用cmd命令总结
1.常用操作 cls #清屏set #查看环境变量cd #切换工作目录 (换盘:直接输入 C: 或 D:)cd.. #返回上级目录exit #关闭cmd窗口 2.有关Python pip instal ...
- 【NOIP2016普及组复赛】魔法阵
题目 分析 设xd-xc为i,那么xb-xa=2i, 又因为xb-xa<(xc-xb)/3, 那么c>6i+b. 于是,先枚举i, 再分别枚举xa和xd, 根据之间的关系,用前缀和求出每一 ...
- Ubuntu18.04下更改apt源为阿里云源
1.复制源文件备份,以防万一 我们要修改的文件是sources.list,它在目录/etc/apt/下,sources.list是包管理工具apt所用的记录软件包仓库位置的配置文件,同样类型的还有位于 ...
- 计时器 GC垃圾回收 demo
计时器: public void start() { //定义计时器 Timer timer=new Timer(); //定义运行间隔(数字越小,速度越快) int interval=30; //创 ...
- cpu、gpu 安装框架pytorch,cntk,theano及测试
一,cpu 下安装 tensorflow conda env list source activate tensorflow 直接安装相应版本 python import tensorflow as ...
- MySQL教程-MyISAM和InnoDB的区别
MySQL的表类型MyISAM和InnoDB之间的最大区别是,InnoDB的支持事务.兄弟连教育( )来给大家做个对比: InnoDB支持一些新的功能:交易,行级锁,外键 InnoDB是高容量,高性能 ...
- Linux 查看内存(free)、释放内存(基本操作)
原文链接:http://blog.51cto.com/11495268/2384147 1.简介 1.1 介绍 很多时候,服务器 负载 很高(执行操作 很慢),很多 原因 造成 这种 现象(内存不足 ...
- luogu P1181 数列分段Section I x
P1181 数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出 ...
- 8.Python标识符命名规范
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量.函数.类.模块以及其他对象的名称. Python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如 ...
- 【Python】学习笔记七:函数
函数的目的:重复使用相同的一段程序 函数的定义 下面是我自定义的一个求a,b,c三个参数平方和的函数 #a,b,c三个参数的平方和 def pow_sum(a,b,c): x = pow(a,2)+p ...