package 字符与字节转换;
import java.io.*;
public class char_byte { public static void main(String[] args) {
// TODO 自动生成的方法存根 } } //理解1
/*java是面向对象的,所有的输入输出都是对 对象而言 以下面的为例 :FileOutputStream fos1 = new FileOutputStream("D:/abc1.txt");
对对象fos1来说文件是输出目标,而 FileInputStream fis2 = new FileInputStream("D:/abc2.txt");对象fis2的文件是输入来源。
*/ //理解2
/*
*输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入。
*将内存中的数据写出到外设中:输出。
*新生成的对象都是放在内存中的,上面的理解也大概是对的。
*/
//理解3
/*
流按照操作数据分为两种:字节流和字符流。
字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作。简单来说:字节流+编码表。
/* //理解4
* 后缀名是父类名,前缀名是该流对象的功能。该对象可以直接操作的类型。read方法在提升,而write方法在降低。
*
//理解5
* writer reader 的本质实现是加了buff缓冲的字节,下面是字节转字符。
* public void write(int c) throws IOException {
synchronized (lock) {
ensureOpen();
if (nextChar >= nChars)
flushBuffer();
cb[nextChar++] = (char) c;
}
} FileOutputStream
三个主要的方法:
void write(int b) 写入一个int数字对应的byte,这点很奇怪:write(65535)和write(255)得到的结果是一致的,write方法只写入int b的最后面8位(一个byte)。需要注意一下。
void write(byte[] b) 写入一个byte数组。因为是字节流,所以在想用这个方法写入字符串到文件的时候,传入的参数应该是调用String类的getBytes方法将字符串转成byte数组再传入。
void write(byte[] b, int off, int len) 写入一个byte数组的制定起始脚标的长度。这个在拷贝文件或者网络传输的时候会常用的,因为需要数出的数据通常不会正好被byte数组b的长度整除,而是有多余的,这里就需要只输出多余的字节。 FileInputStream
int read() 从此输入流中读取一个数据字节。返回读到的byte的int形式,到文件末尾返回的是-1。
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。返回的为读到的数组的长度。到文件末尾返回-1.
int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。返回的为读到的数组的长度。到文件末尾返回-1. */ class BinFileReadDemo {
public static void test1() throws IOException {
FileOutputStream fos1 = new FileOutputStream("D:/abc1.txt");
for (int x = 1; x < 512; x += 16) {
fos1.write(x);
}
fos1.close();
FileOutputStream fos2 = new FileOutputStream("D:/abc2.txt");
fos2.write("我是一个字符串".getBytes());
fos2.close();
} public static void test2() throws IOException {
FileInputStream fis1 = new FileInputStream("D:/abc1.txt");
int num1;
while ((num1 = fis1.read()) != -1) {
System.out.print(Integer.toHexString(num1) + " ");
}
fis1.close();
System.out.println("");
System.out.println("--------------------------------------------------");
FileInputStream fis2 = new FileInputStream("D:/abc2.txt");
int num2;
byte[] b = new byte[1024];
num2 = fis2.read(b);
System.out.write(b, 0, num2);
fis2.close();
}
//普通拷贝
public static void test3() throws IOException {
FileInputStream fis = new FileInputStream("D:/abc1.mp3");
FileOutputStream fos = new FileOutputStream("D:/abc2.mp3");
byte[] b = new byte[1024 * 1024];
int len;
while ((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
fis.close();
fos.close();
}
//对于字节流,也有对应的增强类BufferedOutputStream和BufferedInputStream。
public static void test4() throws IOException {
long start = System.currentTimeMillis();
BufferedInputStream buffis = new BufferedInputStream(
new FileInputStream("D:/jdk-7u9-windows-x64.exe"));
BufferedOutputStream buffos = new BufferedOutputStream(
new FileOutputStream("D:/jdk-7u9-windows-x64-2.exe"));
int num;
while ((num = buffis.read()) != -1) {
buffos.write(num);
}
buffis.close();
buffos.close();
long end = System.currentTimeMillis();
System.out.println((end - start) + "毫秒");
}
//由用户输入字符串,代码将用户的键盘输入转成大写返回。
public static void test5() throws IOException {
InputStream in = System.in;
int b = 0;
StringBuilder sb = new StringBuilder();
while (true) {
b = in.read();
if ((char) b == '\r')
continue;
if ((char) b == '\n') {
String str = sb.toString();
if ("over".equals(str))
break;
System.out.println(str.toUpperCase());
sb.delete(0, sb.length());
}
else
sb.append((char) b);
}
in.close();
}
//考虑到处理换行,可使用BufferedReader,而且键盘输入是字节流,还要考虑到字节流向字符流的转换
public static void test6() throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
}
//将键盘录入转成大写后输出到一个文件中
public static void test7() throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("d:/www.txt")));
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
}
bufr.close();
bufw.close();
} }
[code=java]

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.ArrayList; import sun.nio.*;
class hello{
public static void main(String[] args)throws IOException{ main1();
main2();
main3();
main4(); } static void main1() throws IOException{
File resouceFile = new File("E:\\test.txt");
File targetFile = new File("E:\\copyOftest1.txt"); BufferedReader br = new BufferedReader(new FileReader(resouceFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile));
String aString;
//char[] cbuf = new char[1024];
//int n = 0;
while((aString = br.readLine()) != null){
bw.write(aString);
bw.newLine();
}
//不要忘记刷新和关闭流、否则一方面资源没有及时释放、另一方面有可能照成数据丢失
br.close();
bw.flush();
bw.close();
} static void main2() throws IOException{
File resouceFile = new File("e:\\test.txt");
File targetFile = new File("E:\\copyOftest2.txt"); BufferedReader br = new BufferedReader(new FileReader(resouceFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile)); char[] cbuf = new char[1024];
int n = 0;
while((n = br.read(cbuf)) != -1){
bw.write(cbuf, 0, n);
}
//不要忘记刷新和关闭流、否则一方面资源没有及时释放、另一方面有可能照成数据丢失
br.close();
bw.flush();
bw.close();
} static void main3() throws IOException{ //读取全部文件,但无法解析中文字符
RandomAccessFile testRFile=new RandomAccessFile("E:"+File.separator+"test.txt", "rw");
RandomAccessFile testWFile=new RandomAccessFile("E:"+File.separator+"test3.txt", "rw");
byte cc;
try{
while ((cc=testRFile.readByte())!=-1) {//按字节来写,那就不用在乎编码了!!但很难打印出来看。
//System.out.println((char)cc);
testWFile.write(cc);
}
}catch (Exception e) {
// TODO: handle exception
}
//File aFile=new File("E:"+File.separator+"test3.txt");
//OutputStream aa=new FileOutputStream(aFile);
//Writer out= new BufferedWriter(new OutputStreamWriter(aa));
//Writer out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("E:"+File.separator+"test3.txt"))));
//输入字符串,缓存并以字节的形式保存文件
Writer out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:"+File.separator+"test3.txt")));
out.write("这是一个测试2");
out.flush();
out.close();
}
//上面是按一个字节一个字节的读写,比较慢,下面是优化,按一个数组一个数组的读写!
static void main4() throws IOException{
RandomAccessFile testRFile=new RandomAccessFile("E:"+File.separator+"test.txt", "rw");
RandomAccessFile testWFile=new RandomAccessFile("E:"+File.separator+"test4.txt", "rw");
int readsize=0;
for (int i=0;i<=(testRFile.length()/1024+1);i++){
byte[] bb=new byte[1024];
readsize=testRFile.read(bb);
System.out.println(readsize);
//System.out.println(new String(bb));
try {
testWFile.write(bb,0,readsize);
} catch (Exception e) {
// TODO: handle exception
} //System.out.println(new String(bb,"utf8"));//解析中文字符,但由于是数组形式的,会导致多余的null数据,可以用read时返回的int
//来知道读了多少字节,写入文件时,再写入缓存数组的相应长度,就能解决!完美!
}
testRFile.close();
testWFile.close(); } }
/*
* 泛型:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
* 类型通配符一般是使用 ? 代替具体的类型实参。注意了,此处是类型实参,而不是类型形参!且Box<?>在逻辑上是Box<Integer>、Box<Number>...等所有Box<具体类型实参>的父类。
* 类型通配符上限通过形如Box<? extends Number>形式定义,相对应的,类型通配符下限为Box<? super Number>形式
K —— 键,比如映射的键。
V —— 值,比如 List 和 Set 的内容,或者 Map 中的值。
E —— 异常类。
T —— 泛型。
List<?> 是任何泛型 List 的父类型
*/
class FanXing{
static void main1(){
ArrayList<String> qrrayList=new ArrayList<String>();
qrrayList.add("first1");
qrrayList.add("first2");
qrrayList.add("first3");
qrrayList.add("first4");
} } [/code]

[code=java]
/*
class FileChannelTest { RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt",
"rw");
FileChannel channel = aFile.getChannel(); String newData = "New String to write to file..." + System.currentTimeMillis(); //如果设置的大小不够存放newData,会抛异常java.nio.BufferOverflowException
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes()); buf.flip();//limit设置为当前的position,准备读取这个buffer //FileChannel.write()是在while循环中调用的。
//因为无法保证write()方法一次能向FileChannel写入多少字节
//因此需要重复调用write()方法,直到Buffer中已经没有尚未写入通道的字节
while(buf.hasRemaining()) {
channel.write(buf);
}
channel.close();
/**
* 还有如下方法
* channel.size()//该实例关联文件的大小
* channel.truncate() 截取文件,指定长度后的部分将被删除
* channel.force(true);//强制内存数据flush到硬盘 */
[/code]
 

java IO小结的更多相关文章

  1. Java IO 小结

    Java IO 的学习需要明白流设计的体系结构,这样才能在实际需要的时候,通过API文档查阅,快速实现功能.

  2. java IO 流小结

    java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.

  3. Java: IO 学习小结

    源: 键盘 System.in 硬盘 FileStream 内存 ArrayStream 目的: 控制台 System.out 硬盘 FileStream 内存 ArrayStream 处理大文件或者 ...

  4. java IO回想小结

    java IO原理 IO流用来处理设备之间的传输数据 输入(input):读取外部数据(磁盘.等存储设备)到程序() (内存)中 输出(output):将程序(内存)数据输出到磁盘等存储设备 java ...

  5. JAVA io 包小结

    IO 无非读写 I --> Reader  O--> Writer 为了方便字符 或者 文本文件的 操作创造出了 字符流 尤其是 缓冲字符输入输出流(BufferedReader,Buff ...

  6. [转]java:IO流学习小结

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

  7. Java基础—IO小结(二)缓冲流与其它流的使用

    一.缓冲流的使用 每个字节流都有对应的缓冲流: BufferedInputStream / BufferedOutputStream 构造器: 方法摘要与对应节点流类似 使用缓冲流实现文件复制:实际中 ...

  8. Java IO流

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

  9. Java IO 之 FileInputStream & FileOutputStream源码分析

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

随机推荐

  1. 【洛谷5251】[LnOI2019] 第二代图灵机(线段树+ODT)

    点此看题面 大致题意: 有单点修改数字和区间着色两种修改操作,询问你某段区间内包含所有颜色且数字和最小的子区间的数字和,或某段区间内没有重复颜色且数字和最大的子区间的数字和.数据随机. \(ODT\) ...

  2. DP,得到最多苹果,(POJ2385)

    题目链接:http://poj.org/problem?id=2385 题意: 牛在两棵苹果树下收集苹果,牛只能在这两棵树之间走动w次,在t时刻,某棵树会掉下苹果. 解题报告: ///dp[t][w] ...

  3. matlab 大块注释和取消注释的快捷键

    matlab 大块注释和取消注释的快捷键 注释:Ctrl+R 取消注释:Ctrl +T

  4. 解决windows下Composer因php_openssl扩展缺失而安装失败的问题

    Composer( https://getcomposer.org/ )是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解N ...

  5. jeDate日期控件

    http://www.jayui.com/jedate/     这是日期控件官网,可以去里面下载使用 前台 <%@ Page Language="C#" AutoEvent ...

  6. 关于package.json学习

    1.如果要下载npm包,必须有package.json文件,不然会报错,如果缺少必要字符报错,参考报错信息 2.license,指定用户权限,可以不写,不会报错 3.devDependencies,依 ...

  7. 微信小程序开发:禁止输入表情的控制,验证方法,光标控制

    <input class="weui-input" name="receiptMan" maxlength="10" bindinpu ...

  8. Eclipse+Python环境配置

    Eclipse+Pydev 1.安装Eclipse Eclipse可以在它的官方网站Eclipse.org找到并下载,通常我们可以选择适合自己的Eclipse版本,比如Eclipse Classic. ...

  9. 基于mybatis设计简单信息管理系统1

    驼峰式命名法 骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始:第二个单词的首字母大写或每一个单词的首字母都采用大写字母,例如:myFirs ...

  10. Spring Cloud 入门Eureka -Consumer服务消费(一)

    这里介绍:LoadBalancerClient接口,它是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口来实现服务的消费. 引用之前的文章中构建的 ...