- 浏览: 107712 次
- 性别:
- 来自: 嘉兴
文章分类
最新评论
-
满手都是炸:
同事面试遇到这个题目了
【String类】求字符串中有多少种字符,以及每种字符的重复次数(个数)? -
lingyun304:
lingyun304 写道s1!=s2处理完后,要给s1赋值s ...
【File类】监听判断指定的某个文件是否被修改,如果被修改, 就在控制台打印出“File changed…” -
lingyun304:
s1!=s2处理完后,要给s1赋值s2,即s1=s2;
【File类】监听判断指定的某个文件是否被修改,如果被修改, 就在控制台打印出“File changed…” -
cyky:
这个方法在火狐浏览器不起作用呢,不过在IE是可以的,哈哈。
【HRMS】解决当点击系统的退出按钮后,怎么处理session,若按浏览器的后退键仍能回到之前登录页面的问题;定时跳转的代码 -
gf_crazy:
面试遇见几次,但从没记过,这次载大了,过来学习学习。答案很精辟 ...
【递归】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子···
I/O流
字节输入流:InputStream类为所有字节输入流的父类
三个基本的read()方法:
int read()
从流里读出的一个字节。不推荐使用
int read(byte[] b)
将数据读入到字节数组中,并返回所读的字节数
int read(byte[] b, int off, int len)
off 从哪里开始读。
len 读取多少。
将输入流中最多 len 个数据字节读入字节数组。
其它方法:
void close()
关闭此输入流并释放与该流关联的所有系统资源。
int available()
返回不受阻塞地从此输入流读取的字节数。
long skip(long n)
跳过和放弃此输入流中的n个数据字节,该方法有可能失效。
boolean markSupported()
测试此输入流是否支持 mark 和 reset 方法。
void mark(int n)
在此输入流中标记当前的位置
void reset()
将此流重新定位到对此输入流最后调用 mark 方法时的位置。
字节输出流:OutputStream类是所有字节输入流的父类
三个基本的write()方法:
void write(int n)
将指定的字节写入此输出流。
void write(byte[] b)
将 b.length 个字节从指定的字节数组写入此输出流。
void write(byte[] b, int off, int len)
将指定字节数组中从偏移量off开始的len个字节写入此输出流。
其它方法:
void close()
关闭此输出流并释放与此流有关的所有系统资源。
void flush()
刷新此输出流并强制写出所有缓冲的输出字节。
文件输入输出流:FileInputStream和FileOutputStream
要构造一个FileInputStream,所关联的文件必须存在而且是可读的。
如:
FileInputStream fis = new FileInputStream("myfile.dat");
要构造一个FileOutputStream,而输出文件已经存在,则它将被覆盖。
如:
FIleOutputStream fos = new FileOutputStream("results.dat");
要想以追加的方式写,则需要一个额外的参数,如:
FileOutputStream outfile = new FileOutputStream("results.dat" ,true); //参数为true时输出为追加,为false时为覆盖。
流的概念:程序与数据来源之间的桥梁
流的分类:
按数据方向分:输入流和输出流
输入流:InputStream/Reader
OutputStream/Writer
按数据类型分:字节流和字符流
字节流:InputStream/OutputStream
字符流:Reader/Writer
按流的功能分:节点流和处理流
节点流用操作数据的来源。
处理流用来封装节点流,从而给节点流增加一个功能,不能独立存在,在关闭流时如果使用了处理流,只需关闭最外层的流就可以了。
区分节点流和处理流的小方法:
看构造器,节点流参数为数据来源,而处理流参数为其他流。
选择流的思路:
先考虑是输入流还是输出流,
再考虑是字节流还是字符流,
最后考虑是节点流还是处理流。
字符流:Reader和Writer所有字符流的父类型
Java技术使用Unicode来表示字符串和字符,而且提供16位版本的流,以便用类似的方法处理字符。
如果构造了一个连接到流的Reader和Writer,转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。
桥梁流:InputStreamReader和OutputStreamWriter(字节流转化成字符流的桥转换器)
这两个类不是用于直接输入输出的,他是将字节流转换成字符流的桥转换器,并可以指定编解码方式。
逐行读写流:BufferedReader/BufferedWriter
以上两个都是过滤流,需要用其他的节点流来作参数构造对象。
BufferedReader的方法:readLine():String ,当他的返回值是null时,就表示读取完毕了。要注意,再写入时要注意写换行符,否则会出现阻塞。
BufferedWriter的方法:newLine() ,这个方法会写出一个换行符。
管道流:线程交互的时候使用
PipedInputStream/PipedOutputStream
传送输出流可以连接到传送输入流,以创建通信管道。传送输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。
注意:管道输出流和管道输入流需要对接。
数据流:DataInputStream和DataOutputStream
通过流来读写Java基本类,注意DataInputStream和DataOutputStream的方法是成对的。
支持直接输出输入各种数据类型。
注意:使用DataOutputStream/DataInputStream时,要注意写入顺序和读取顺序相同,否则会将没有分割写入的信息分割不正确而读取出错误的数据。
Properties类:针对属性文件(*.properties,内容是name=value)进行操作,在java.util包下
load(InputStream inStream)
从输入流中读取属性列表(键和元素对)。
getProperty(String key)
用指定的键在此属性列表中搜索属性。
java编码方式:
编码:把字符转换成数字存储到计算机中,按ASCII将字母映射为整数。
解码:把数字从计算机转换成相应的字符的过程。
不同的国家有不同的编码,当编码方式和解码方式不统一时,产生乱码。
因为美国最早发展软件,所以每种的编码都向上兼容ASCII 所以英文没有乱码。
ASCII(英文) 1个字符占一个字节(所有的编码集都兼容ASCII)
ISO8859-1(拉丁文) 1个字符占一个字节
GB-2312/GBK 1个字符占两个字节(多用于中文)
Unicode 1个字符占两个字节(网络传输速度慢)
UTF-8 变长字节,对于英文一个字节,对于汉字两个或三个字节。
中文编码时出现乱码的情况:
用流操作文件。
网页(动态静态)。
网络传递消息。
解决乱码的方式:
String temp = 乱码的字符串
temp = new String(temp.getBytes("ISO8859-1") , "GBK")
将temp按照ISO8859-1的方式进行解码生成一个字节序列,然后在按照GBK的方式解码字节序列生成字符串。
File类:可表示文件或者目录
File下的方法是对磁盘上的文件进行磁盘操作,但是无法读写文件的内容。
构造器:
File(String pathname) //以文件的路径做参数
File类的方法:
boolean createNewFile()
创建一个新文件
File createTempFile(String prefix, String suffix, File directory)
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。会在前缀和后缀之间加一个随机数
boolean mkdir()
创建一个新目录
boolean delete()
删除文件,删除的是创建File对象时指定与之关联创建的那个文件。
String[] List()
返回当前File对象下所有显文件和目录名(相对路径)
File[] ListFiles()
返回当前File对象(必须是目录)下的所有File对象,可以用getName()来访问到文件名。
boolean isDirectory()和boolean isFile()
判断究竟是目录还是文件。
boolean exists()
判断文件或文件夹是否存在。
String getPath()
获得相对路径。
String getAbsolutePath()
获得文件的绝对路径
注意:
File类的对象实施表示一个文件并不是真正的文件,只是一个代理而已,通过这个代理来操作文件
创建一个文件对象和创建一个文件在java中是两个不同的概念。前者是在虚拟机中创建了一个文件,但却并没有将它真正地创建到OS的文件系统中,随着虚拟机的关闭,这个创建的对象也就消失了。而创建一个文件才是在系统中真正地建立一个文件。
例如:
File f=new File(“11.txt”); //创建一个名为11.txt的文件对象
f.CreateNewFile(); //真正地创建文件
RandomAccessFile:
允许随机访问文件,类支持直接输出输入各种数据类型。
构造器:
RandomAccessFile(File file, String mode)
创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
RandomAccessFile(String name, String mode)
创建从中读取和向其中写入(可选)的随机存取文件流,该文件具有指定名称。
mode( r:以只读方式打开 rw:可读可写,不存在则创建)
相关方法:
long getFilePointer()
返回文件指针的当前位置。
void seek(long pos)
设置文件指针到给定的绝对位置。
long length()
返回文件的长度。
对象流:ObjectInputStream和ObjectOutputStream(实现对象序列化)
对象流是过滤流,需要节点流作参数来构造对象,用于直接把对象写入文件和从文件中读取对象。
只有实现了Serializable接口的类型的对象才可以被读写,Serializable接口是个标记接口,其中没有定义方法。
对象会序列化成一个二进制代码,文件中保存对象的属性。
writeObject(o)、readObject()这两个是对象读写操作时用的方法。
Object o = new Object();
FileOutputStream fos=new FileOutputStream("Object.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(o);
oos.close();
FileInputStream fis =new FileInputStream(“Object.txt”);
ObjectInputStream ois =new ObjectInputStream(fis);
Object o = (Object)Ois.readObject();
ois.close();
一个类中有其他类型的对象,那么,这个类实现了Serializable接口,在对象序列化时,也同样要求这个类中属性都能够对象序列化(基本类型除外)。
注意:
对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到上一次写入的对象,使用对象流写入时,会先写入一个头部,然后写入数据,最后加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在读取时只会读到结束符为止,以后再次写入的数据就会丢失。
对象流:ObjectInputStream和ObjectOutputStream
对象流是过滤流,需要节点流作参数来构造对象,用于直接把对象写入文件和从文件中读取对象。
只有实现了Serializable接口的类型的对象才可以被读写,Serializable接口是个标记接口,其中没有定义方法。
对象会序列化成一个二进制代码。
writeObject(o)、readObject()这两个是对象读写操作时用的方法。
Object o = new Object();
FileOutputStream fos=new FileOutputStream("Object.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(o);
oos.close();
FileInputStream fis =new FileInputStream("Object.txt");
ObjectInputStream ois =new ObjectInputStream(fis);
Object o = (Object)ois.readObject();
ois.close();
transient只能用来修饰属性。表示这个属性在对象序列化时将被忽略。
transient int num;
表示当我们进行序列化时忽略这个属性。
注意:
对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到上一次写入的对象。使用对象流写入时,会先写入一个头部,然后写入数据,最后加上结束符号,如果使用追加方式写入的话,那就会在结束符号继续向下写入,但是在读取时只会读到结束符为止,以后再次写入的数据就会丢失。
包名、类名和属性可以被序列化,方法和构造器不会被序列化的。
静态属性不会被序列化的。
属性会被递归序列化的,也就是一个类中有引用类型的属性,如果这个属性对应的类实现了Serializable接口,在对象序列化时,也同样会对这个类中的属性进行对象序列化,如果没有实现Serializable接口,则会抛出异常。
所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。
网络中传递对象必须实现序列化。
nio无阻塞的I/O(优化的I/O)
java.nio 定义块
Buffer类:一种用于特定的基本类型数据的容器
缓冲:就是块,用来存储内容。
容量:内存开辟的大小,根据类型的不同,有不同的空间。
界限:可用部分,即不应读取或写入的第一个元素的索引。
位置:当前指针的位置,从0开始。
容量>=界限>=位置
相关方法:
int capacity()
返回此缓冲区的容量。
int limit()
返回此缓冲区的界限。
int position()
返回此缓冲区的位置。
Buffer flip()
相当于截断没有用的空间,然后把指针移向开头,使limit=position,position=0
Buffer position(int newPosition)
设置此缓冲区的位置。
当有大的文件需要处理的时候,为了不影响性能建议用直接缓冲。
Buffer有直接缓冲和间接缓冲两种。
只有ByteBuffer类提供了直接缓冲。使用直接缓冲,不影响程序。其它类想用直接缓冲需要进行转换。
java.nio.channels 对块进行读写的通道,类似于以前的流
Channel接口:用于 I/O 操作的连接
编程步骤:
a. 先创建一个I/O流,
b. 使用I/O流.getChannel()方法,获得通道,
c. 创建大小合适的ByteBUffer,
d. 通道的对象.read(buffer)/write(buffer)进行读写,
e. 关闭所有的流和通道,
f. 如果有多线程并发,可以使用"通道.lock()"获得FileLock对象,用FileLock.release() 释放此锁定。
g. 当遇到编码问题,使用CharSet、CharsetDecoder、CharsetEncoder三个类去解决
注意:
在读之前需要调用一下clear()方法,帮助读操作清理缓冲;写之前需要调用flip()方法,帮助写操作清理缓冲。
java.nio.charset 字符集,进行编码解码
Charset类:编码类,编码的信息
forName(String charsetName)
生成一个CharSet实例。
decode(ByteBuffer bb)
将此 charset 中的字节解码成 Unicode 字符的便捷方法。
encode(CharBuffer cb)
将此 charset 中的 Unicode 字符编码成字节的便捷方法。
CharsetDecoder类:解码器
能够把特定 charset 中的字节序列转换成 16 位 Unicode 字符序列的引擎。
CharsetEncoder类:编码器,编码的行为
能够把 16 位 Unicode 字符序列转换成特定 charset 中字节序列的引擎。
发表评论
-
FifteenthDay--Java基础(十三)软件开发流程
2010-09-29 10:11 740软件开发流程: 1、可行性分析 2、需求分析->开发测试 ... -
FourteenthDay--Java基础(十二)5.0新特性
2010-09-29 10:08 6915.0新特性: 1、自动装箱,自动解箱(简单类型-> ... -
ThirteenthDay--Java基础(十一)国际化
2010-09-29 10:07 655国际化:让世界上每个人都能看懂。 Locale类(java.u ... -
TwelfthDay--Java基础(十)网络编程
2010-09-29 10:04 679网络编程: 网络基础知识 Mac地址:每个网卡专用地址,也是 ... -
TenDay--Java基础(八)多线程
2010-09-29 09:56 873多线程: 进程与线程: 进程:同一个操作系统中执行的一个子程 ... -
NinthDay--Java基础(七)图形界面
2010-09-29 09:53 745图形界面: AWT:抽象 ... -
EighthDay--Java基础(六)异常
2010-09-29 09:50 645异常: 异常的分类 Java会将所有的异常封装成对象,其根本 ... -
SeventhDay--Java基础(五)反射、内部类
2010-09-29 09:48 1041反射: 反射:在运行时动态分析或使用一个类进行工作。 java ... -
SixthDay--Java基础(五)集合
2010-09-29 09:45 744集合:保存多个其他对 ... -
FifthDay--Java基础(四)抽象类与接口、String与StringBuffer
2010-09-29 09:43 815修饰符abstract:抽象的,定义框架不去实现,可以修饰类和 ... -
FourthDay--Java基础(三)访问修饰符,关键字static、final
2010-09-29 09:38 992修饰符static: 把对象相关的变成类相关的,它可以修饰属性 ... -
ThirdDay--Java基础(二)面向对象
2010-09-29 09:35 698类和对象: 类:主观 ... -
SecondDay--Java基础(一)
2010-09-29 09:31 666局部变量:不是声明在类体括号里面的变量 (1)必须要先赋值,后 ... -
FirstDay--配置java环境变量(Java入门)
2010-09-29 09:27 752配置java环境变量: JAVA_HOME:配置JDK的目录 ...
相关推荐
springboot获取根目录及资源路径及解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static,采用该工具类可在发布成jar时访问到资源文件路径地址
以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! ...
Chapter 3 - A Sensitivity Study of Parallel I/O under PVFS—Lessons Learned Using a Parallel File System on PC Clusters Chapter 4 - The Parallel Effective I/O Bandwidth Benchmark—b_eff_io ...
先把dingtalk-sdk-java安装到本地的 maven库...mvn install:install-file -Dfile=/Users/dufuzhong/MyData/MyCode/demo/dingtalk-sdk-java/taobao-sdk-java-auto_1479188381469-20200703.jar -DgroupId=dingding -Darti
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
二进制tar.gz包,可用于32bit和64bit的linux类系统下的浏览器java运行环境的完整插件支持; 不用质疑,官方建议64bit系统上也最好安装32bit的jre,除非你确定你用的是64bit的浏览器,确认方法命令: #ldd /opt/fire...
Java I/O 流代码实例大全(01~09) File、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=fastdfs-client-java-1.29-SNAPSHOT.jar pom.xml 文件中写入: <groupId>...
#安装指令 npm install nej-minimage -g #图片无损压缩指令 文件夹操作(非图片文件直接拷贝) nej-minimage ./test/directory/res/ -f ...nej-minimage -i=./test/file/bd5.jpg -o=./test/file/bd5_1.jpg
* This file implements the basic I/O fucntions that access a register of W5300( IINCHIP_REG). * * Revision History : * ---------- ------- ----------- ---------------------------- * Date Version ...
MySQL Connector/J是MySQL官方JDBC驱动程序。将下载的驱动包解压缩后,将MySQL-connector-Java-5.1.34-bin.jar拷贝到项目中 Connector/J 5.34包括JDBC-4.0功能的支持
PEDUMP - Win32/Win64 EXE/OBJ/LIB/DBG file dumper - 2001 Matt Pietrek 支持win64文件.
1、在某一个磁盘下新建一个文件夹:例如在E盘下创建一个... cmd ----E:-----cd E://mybatisTable----Java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite 在CMD中执行以上命令,即可。
手把手教你在CCS3.3中进行“File_I_O
最新官方淘宝服务端SDK,5月18日更新,包含taobao-sdk-java.jar和taobao-sdk-java-source.jar两个文件,供大家下载研究。 maven安装命令:mvn install:install-file -Dfile=路径\xxx.jar -DgroupId=dingtalk-sdk-...
在本篇文章里小编给大家整理的是关于linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方法,有需要的朋友们参考下。
<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> <jsp-config> <taglib-uri>...
mvn install:install-file -Dfile="/app/ua-parser-master/java/target/ua-parser-1.3.0.jar" -DgroupId=ua_parser -DartifactId=ua-parser -Dversion=1.3.0 -Dpackaging=jar ua_parser groupId是下划线 ua-parser ...
| |----gen_excel_file.cpp //excel文件操作类 | |----input_data.cpp //生成虚拟数据 | |----main.cpp //调用gen_excel_file类 | |------iofiles | |----head.txt //格式定义文件 | |------generate_excel.vcproj ...