IO(下)
来源:互联网 发布:知易商标网 编辑:程序博客网 时间:2024/06/05 15:00
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
IO:
字节流:
针对的字节数据,包括文本也包括媒体数据,如果是纯文本用字符流处理较为便捷。
字节流所使用的缓冲区是一个byte[]。
常用的对象:
FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream。
需求:
copyMp3
{
FileInputStream fis = new FileInputStream("1.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);
BufferedOutputStream bufos = new BufferedOutputStream(fos);
{
bufos.write(by);
bufos.flush();
}
bufis.close();
{
private InputStream in;
private byte[] arr = new byte[1024*4];
private int pos = 0,count = 0;
MyBufferedInputStream(InputStream in)
{
this.in = in ;
}
{
if(count==0)
{
count = in.read(arr);
if(count<0)
return -1;
pos = 0;
byte b = arr[pos];
pos++;
count--;
return b;//return b&255;
}
else if(count>0)
{
byte b = arr[pos];
pos++;
count--;
return b;//return b&0xff;
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}
}
因为mp3数据最终的二进制表现形式中,很容易出现连续N多1的情况,
只要出现了连续的8个1,对于一个字节而言十进制体现形式就是-1。
那么就满足while循环结束条件。程序终止。
为了避免这种情况,在读到一个字节时,将该字节进行了提升变成int型。
但是byte-1,变成int 还是-1。为了避免,在进行提升的过程中,保留的源字节的8为数据,并在前以补零方式进行提升。
如何补的零呢?只要将读到的字节&255或者&0xFF.都可以。这也是read方法不是返回byte而返回int类型的原因。
只写出了最低的8位,或者最低的16位。
四个:
四个。
当读到的字节数据都是纯文本的时候,而且文本中出现中文字符,那么在解析该字节数据时就需要指定编码表。
因为可以识别中的编码表不唯一。在使用转换流时,如果未指定编码表,那么默认使用本地码表。
OutputStreamWriter:字符通向字节的桥梁
1,明确数据源和数据目的。
明确到底是使用输入流还是输出流。
2,明确要处理的数据是否是纯文本。
明确到底是使用字符流还是字节流。
当明确体系后,到底该用该体系的哪个对象呢?
根据数据存在的设备而定,
数据源所在设备可以是,硬盘,键盘,内存。
数据目的所在设备可以是,硬盘,控制台,内存。
获取键盘录入,将录入信息存储到本地文件中。
处理的数据:纯文本,字符输入流。Reader
该用哪个对象呢?
键盘录入System.in完成的。那么它是一个标准的字节输入流。InputStream。
但是为了提高对字符操作的效率,BufferedReader.
new BufferedReader(new InputStreamReader(System.in));
处理的数据:纯文本,字符输出流。Writer。
该用该体系的哪个对象呢?
可以操作的文件FileWriter对象。
为了提高写入流的效率。BufferedWriter.
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw =
new BufferedWriter(new FileWriter("a.txt"));
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
/*
如果基本上面的分析,但不使用缓冲区,代码是一个什么样子呢?
*/
public static void show()throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
{
System.out.println(len);
String s = new String(arr,0,len-2);
if("over".equals(s))
break;
fw.write(arr,0,len);
fw.flush();
}
fw.close();
isr.close();
}
数据:纯文本,字符输入流,Read。
该用哪个对象呢?
因为是文件FileReader为了提高效率BufferedReader.
处理的数据:纯文本,字符输出流。Writer。
该用该体系的哪个对象呢?
可以操作的文件的对象,但是因为要将字符数据进行编码在进行存储,就需要使用字符向字节过滤的桥梁。OutputStreamWriter.
就要使用转换流。而转换流要接收的对象都是字节流对象。所以要使用的可以操作的File的FileOutputStream。
为了提高写入流的效率。BufferedWriter.
{
BufferedReader bufr = new BufferedReader(new FileReader("a.txt));
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8"));
}
printStackTrace(PrintStream );
{
int[] arr = new int[2];
System.out.println(arr[3]);
}
catch(Exception e)
{
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(d);
{
PrintStream out = new PrintStream("exception.log");
e.printStackTrace(out);
}
catch(IOException e)
{
throw new RuntimeException("日志建立失败");
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
0 0
- IO(下)
- IO流(下)
- IO流(下)
- 14 IO流(下)
- IO(下)
- java中的IO详解(下)
- java中的IO详解(下)
- java基础之-IO(下)
- 黑马程序眼-----------IO流(下)
- 黑马程序员----IO流(下)
- 黑马程序员-----java基础(IO下)
- Java中的IO流(下)
- Java基础知识 十三 IO流(下)
- 黑马程序员- IO流(下)
- java IO流详解(下)
- 【九】Java IO流(下)
- Java 文件 IO 详解(下)
- java IO 下
- sturts框架的简单搭建及举例
- 杭电1022 Train Problem I
- ndroid 画图之setXfermode
- 学习IOS开发的第10天
- 2014笔试题
- IO(下)
- 在CentOS VPS上通过SSH安装 Java-JDK,VPS 搭建网站之序列一
- VS2010生成解决方案出现错误:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 记录用户状态与过滤方法(过滤器使用)
- 【Android学习】Android数据的四种储存方式(3)--SQLite
- Lucene:基于Java的全文检索引擎简介
- 玩转开源系统总概述
- oracle
- mac笔记——from“http://macshuo.com/”