这个移动有什么流量套餐餐是干什么的?

2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。16:41 提问
C++将文件转换成二进制数据流
最近学C++的时候想了个问题,能否将文件或图片转换成二进制的字符串,
然后在需要的时候将二进制数据转换成文件能,这样就相当于模拟了文件上传的过程,
希望有源码配上详细的注释
按赞数排序
void WriteFromStream(char * buf,char * filename,UINT size)
FILE * f = fopen(filename,"wb+");
fwrite(buf,1,size,f);
fclose(f);
void ReadToStream(char * filename)
FILE * f = fopen(filename,"rb");
fseek(f,0,SEEK_END);
int size = ftell(f);
char * buf = new char[size];
fseek(f,0,SEEK_SET);
memset(buf,0,size);
int nRead = fread(buf,sizeof(char),size,f);
fclose(f);
if (nRead & 0)
//将二进制流打印成16进制字符串
for(unsigned int i = 0; i & nRi++)
printf("%02X ",(unsigned char)buf[i]);
if (i%16 == 15)
printf("\n");
char new_file[MAX_PATH] = "";
sprintf(new_file,"new_%s",filename);
WriteFromStream(buf,new_file,size);
WinExec("explorer .",SW_SHOW);
int main(int argc,char **argv)
ReadToStream("temp.zip");
一般是转成base64编码。因为base64使用64个元字符,所以它比诸如00 FA 00 1E之类的十六进制字符串(使用16个元字符)的存储效率高4倍。
我之前问过这样的问题。将二进制字符串转换成位图。
我只是一时好奇,所以得有源码给我分析分析才行,悬赏不会少,毕竟我是菜,所以悬赏会多些,只为求详细点的源码
//读到二进制
FILE * f = fopen(filename,"rb");
fseek(f,0,SEEK_END);
long size = ftell(f);
char * buf = new char[size];
fread(buf,sizeof(char),size,f);
//写到二进制,和读差不多
fwrite(...);
其他相似问题查看: 3791|回复: 7
怎么能把一列数据转换成一个字符串?然后在字符串中找特定组合?
阅读权限20
在线时间 小时
本帖最后由 pezh011 于
09:52 编辑
我有一张表,想找出一种规律,表如下所示(这个表很长),想找出每列中连续出现●、●●、●●●、●●●●、●●●●●的次数,最初的想法是把一列数据转换成一个字符串,再在字符串中找特定组合,但是这个表很长,好象也没能办法转换成一个字符串,如果能转成,怎么在字符串中搜索●、●●、●●●、●●●●、●●●●●分别出现的次数
(229.61 KB, 下载次数: 20)
09:42 上传
点击文件名下载附件
360桌面截图38.jpg (54.52 KB, 下载次数: 0)
09:52 上传
阅读权限100
在线时间 小时
=SUM(N(FREQUENCY(IF(ISERR(-B$2:B$1389),ROW($2:$1389)),IF(ISNUMBER(B$2:B$1389),ROW($2:$1389)))=LEN(AJ18)))复制代码
阅读权限150
在线时间 小时
=SUM(N(FREQUENCY(IF(B$2:B$1389=&●&,ROW($2:$1389)),IF(B$2:B$1389&&&●&,ROW($2:$1389)))=LEN(AJ18)))
10:11 上传
点击文件名下载附件
126.27 KB, 下载次数: 15
阅读权限20
在线时间 小时
delete_007 发表于
能否解释以下ISERR(-B$2:B$1389)是什么意思?
和3楼公式是一个意思。&
阅读权限100
在线时间 小时
=COUNT(1/(FREQUENCY(ROW(B$1:B$1389),(B$1:B$1389&&B$2:B$1390)*ROW(B$1:B$1389))*(B$1:B$1390=&●&)=LEN(AJ18)))复制代码详见附件^_^
10:46 上传
点击文件名下载附件
234.82 KB, 下载次数: 7
阅读权限20
在线时间 小时
祝洪忠- 发表于
=SUM(N(FREQUENCY(IF(B$2:B$1389=&●&,ROW($2:$1389)),IF(B$2:B$1389&●&,ROW($2:$1389)))=LEN(AJ18)))
谢谢高手的关注和帮助,能否解释一下公式的思路,两个if为真时,返回结果是一样的吗?如果表是动态增加数据的,怎么办?
阅读权限20
在线时间 小时
delete_007 发表于
谢谢你的热情帮助,虽然公式理解不了,但进行验证后,觉得是否是这样的,统计●的数量是否包含●●、●●●、●●●●●等的数量,统计●●的数量是否包含●●●、●●●●、●●●●●等的数量。能否分别统计啊
阅读权限20
在线时间 小时
mps777 发表于
详见附件^_^
谢谢你的帮助,能否说明一下思路。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师支付宝(1)
本例主要是将.zip的压缩文件,转换成string类型,进数据传送。有的读者要问干嘛不用stream流呢,可以用流,现在不支持流又该怎么弄呢,可以用byte[],那byte[]也不支持呢,那就乖乖用String吧。
主要思想是通过byte[]将文件类型转换成String类型,有以下几种方式:
注意:不要直接toString()
byte[]转String
byte[] temp = new byte[1024];
while ((b = fis.read(temp)) != -1) {
outstream.write(temp, 0, b);
String转byte[]
fileStr.getBytes(&ISO-8859-1&)
BASE64Encoder encoder = new BASE64Encoder();
while ((b = inputstream.read(temp)) != -1) {
fileStr+= encoder.encode(temp);
String转byte[]
BASE64Decoder decoder = new BASE64Decoder();
byte[] appByte = decoder.decodeBuffer(fileStr);
&ftpOutstream.write(appByte);
读者自己写转换吧
本编博客以支付宝的电子对账单为例,奇怪的是电子对账单直接用支付宝流转成string,居然出错,最后一个文件错误,大小不变文件却缺失,没办法只能先保存在本地,然后读取本地文件流,用完再删除了,代码在下面↓↓↓↓↓↓↓↓↓↓↓↓
package com.
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.InputS
import java.net.HttpURLC
import java.net.URL;
import java.util.ArrayL
import java.util.L
import java.util.M
import java.util.zip.ZipOutputS
import javax.servlet.http.HttpServletR
import net.sf.json.JSONO
import org.codehaus.jackson.map.ObjectM
import sun.misc.BASE64D
import sun.misc.BASE64E
import com.alipay.api.AlipayC
import com.alipay.api.DefaultAlipayC
import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryR
import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryR
import com.log.AppLogU
import com.service.ReceiverH
* @author muyunfei
* &p&Modification History:&/p&
Description&/p&
* &p&------------------------------------------------------------------&/p&
public class AliZipDemo{
* 获得对账单数据流(.zip),并将.zip通过byte[]保存成string进行传送
* String获得后转成byte[],然后保存成.zip
public String sendZipByStr() {
String aliGateWay=&/gateway.do&;//支付宝网关
String dateStr=&&;//日期
以天为最低单位
String appId=&***********&;//appid
//商户私钥
String privateKey=&********************************************************&;
String strType=&json&;//数据格式
String chartType=&utf-8&;//编码格式
//支付宝公钥
String aliPublicKey=&************************************************&;
AlipayClient alipayClient = new DefaultAlipayClient(aliGateWay,appId,privateKey,strType,chartType,aliPublicKey);
AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
request.setBizContent(&{& +
\&bill_type\&:\&trade\&,& +
\&bill_date\&:\&&+dateStr+&\&& +
AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
//获得下载对账单地址
System.out.println(response.getBillDownloadUrl());
System.out.println(response.getCode());
System.out.println(response.getMsg());
if(response.isSuccess()){
//调用成功,下载对账文件
String urlStr=response.getBillDownloadUrl();
//创建文件链接
URL url = new URL(&/rmsportal/sDdxhkwUKuHUDLe.png&);
URL url = new URL(urlStr);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
//设置链接参数
httpUrlConnection.setConnectTimeout(5 * 1000);
httpUrlConnection.setDoInput(true);//打开输入输出流
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestMethod(&GET&);
httpUrlConnection.setRequestProperty(&Charsert&, &UTF-8&);
httpUrlConnection.setRequestProperty(&Connection&, &Keep-Alive&);
//建立链接
httpUrlConnection.connect();
//获得输入流,文件为zip格式,
//支付宝提供
//60906.csv.zip内包含
//60906_业务明细.csv
//60906_业务明细(汇总).csv
InputStream fis = httpUrlConnection.getInputStream();
//从url中获得文件名downloadFileName=60909.csv.zip
//直接将流转换成字符串出现zip内最后一个文件异常,只能先保存到本地,然后进行转换
String filename=getDownloadFileName(urlStr);
File file = new File(filename+&.zip&);
FileOutputStream outstream = new FileOutputStream(file);
//将获得数据流转换成byte,然后转成String,向内网传送
byte[] temp = new byte[1024];
while ((b = fis.read(temp)) != -1) {
fileStr+=byte2hex(temp);
fileStr+=new String(temp,&ISO-8859-1&);
outstream.write(temp, 0, b);
outstream.flush();
outstream.close();
fis.close();
//获取本地文件转换成字符换
File file2 = new File(filename+&.zip&);
FileInputStream inputstream=new FileInputStream(file2);//本地文件的输入流
String fileStr=&&;//内网传送数据,file的转byte的字符串
BASE64Encoder encoder = new BASE64Encoder();
while ((b = inputstream.read(temp)) != -1) {
fileStr+= encoder.encode(temp);
inputstream.close();
System.out.println(&文件1:&+fileStr);
//删除本地文件
file2.delete();
//测试保存文件
File ftpfile=new File(&G:/&+filename+&2.zip&);
FileOutputStream ftpOutstream = new FileOutputStream(ftpfile);
BASE64Decoder decoder = new BASE64Decoder();
byte[] appByte = decoder.decodeBuffer(fileStr);
ftpOutstream.write(appByte);
outstream.write(fileStr.getBytes(&ISO-8859-1&));
ftpOutstream.flush();
ftpOutstream.close();
System.out.println(&ok&);
//成功向内网传送
return &{\&code\&: 1,\&result\&: \&&+fileStr+&\&}&;
} catch (Exception e) {
AppLogUtil.getAppLoger().error(&从支付宝获取对账单,根据对账单地址获取对账单异常:& + e.getMessage());
e.printStackTrace();
return createErrorMsg(&fail&).toString();
AppLogUtil.getAppLoger().error(&从支付宝获取对账单,获取对账单地址失败&);
return createErrorMsg(&fail&).toString();
}catch(Exception e){
AppLogUtil.getAppLoger().error(&从支付宝获取对账单,获取对账单地址失败:& + e.getMessage());
e.printStackTrace();
return createErrorMsg(&fail&).toString();
* 生成错误信息
* @param msg
private JSONObject createErrorMsg(String msg){
String error=&{\&code\&: 1,\&result\&: \&&+msg+&\&}&;
return JSONObject.fromObject(error) ;
&span style=&white-space:pre&& &/span&//获取文件名
private String getDownloadFileName(String urlStr){
String tempStr = urlStr.substring(urlStr.indexOf(&downloadFileName&)+17, urlStr.length());
tempStr = tempStr.substring(0,tempStr.indexOf(&.zip&));
return tempS
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:368651次
积分:5086
积分:5086
排名:第4152名
原创:141篇
转载:17篇
评论:108条
(2)(6)(7)(3)(1)(1)(1)(1)(5)(9)(5)(2)(2)(4)(6)(1)(2)(2)(1)(2)(1)(2)(2)(3)(3)(11)(5)(8)(3)(5)(4)(9)(5)(1)(4)(2)(4)(3)(1)(3)(4)(10)(4)Java基础(66)
通过数据流、序列化和文件系统提供系统输入和输出。
Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。
1.1、Java流的分类
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
1.2、java.io常用类
JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类:
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。
  流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的:
stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:
  (1)字节流
  表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。
  (2)字符流
  以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。
  区别:
  Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。
  但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用&基于byte的类&和&基于字符的类&。为此,它还提供了两个&适配器(adapter)&类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。
  一.流的层次结构
  定义:
  (1)&&&&&& java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 输入流
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &输出流
 二.InputStream类
  inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。
  InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:
  (1)&&&&&& public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。
  (2)&&&&&& public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
  (3)&&&&&& public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
  (4)&&&&&& public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,
  (5)&&&&&& public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
  (6)&&&&&& public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
  三.OutputStream类
  OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
  1. public void write(byte b[ ]):将参数b中的字节写到输出流。
  2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
  3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。
  4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
  5. public void close( ) : 关闭输出流并释放与流相关的系统资源。
  注意:
  1. 上述各方法都有可能引起异常。
  2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。
  四.FileInputStream类
  FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:
  方式1:
  File fin=new File(&d:/abc.txt&);
  FileInputStream in=new FileInputStream(fin);
  方式2:
  FileInputStream in=new
  FileInputStream(&d: /abc.txt&);
  方式3:
  构造函数将 FileDescriptor()对象作为其参数。
  FileDescriptor() fd=new FileDescriptor();
  FileInputStream f2=new FileInputStream(fd);
  五.FileOutputStream类
  FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。
  创建一个文件流对象有两种方法:
  方式1:
  File f=new File(&d:/abc.txt&);
  FileOutputStream out=new FileOutputStream (f);
  方式2:
  FileOutputStream out=new
  FileOutputStream(&d:/abc.txt&);
  方式3:构造函数将 FileDescriptor()对象作为其参数。
  FileDescriptor() fd=new FileDescriptor();
  FileOutputStream f2=new FileOutputStream(fd);
方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。
  FileOutputStream f=new FileOutputStream(&d:/abc.txt&,true);
  注意:
  (1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。
  举例:2-1
  六.File类
  File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。
  File类主要用于命名文件、查询文件属性和处理文件目录。
  举例:2-2
  七.从一个流构造另一个流
  java的流类提供了结构化方法,如,底层流和高层过滤流。
  而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。
  使用&分层对象(layered objects)&,为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被decorate过,传给它的消息总是相同的。这也是Java I/O类库要有&filter(过滤器)&类的原因:抽象的&filter&类是所有decorator的基类。Decorator模式常用于如下的情形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武之地。
  为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。
FilterInputStream的种类
构造函数的参数
DataInputStream
与DataOutputStream配合使用,这样你就能以一种&可携带的方式(portable fashion)&从流里读取primitives了(int,char,long等)
InputStream
包含了一整套读取primitive数据的接口。
BufferedInputStream
用这个类来解决&每次要用数据的时候都要进行物理读取&的问题。你的意思是&用缓冲区。&
InputStream,以及可选的缓冲区的容量
它本身并不提供接口,只是提供一个缓冲区。需要连到一个&有接口的对象(interface object)&。
LineNumberInputStream
跟踪输入流的行号;有getLineNumber( )和setLineNumber(int)方法
InputStream
只是加一个行号,所以还得连一个&有接口的对象&。
PushbackInputStream
有一个&弹压单字节&的缓冲区(has a one byte push-back buffer),这样你就能把最后读到的那个字节再压回去了。
InputStream
主要用于编译器的扫描程序。可能是为支持Java的编译器而设计的。用的机会不多。
FilterOutputStream的种类
构造函数的参数
DataOutputStream
与DataInputStream配合使用,这样你就可以用一种&可携带的方式(portable fashion)&往流里写primitive了(int, char, long,等)
OutputStream
包括写入primitive数据的全套接口。
PrintStream
负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。
一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。
应该是OutputStream对象的最终包覆层。用的机会很多。
BufferedOutputStream
用 这个类解决&每次往流里写数据,都要进行物理操作&的问题。也就是说&用缓冲区&。用flush( )清空缓冲区。
OutputStream, 以及一个可选的缓冲区大小
本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。
  DataInputStream类对象可以读取各种类型的数据。
  DataOutputStream类对象可以写各种类型的数据;
  创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:
  FileInputStream in=new FileInputStream(&d:/abc.txt&);
  DataInputStream din=new DataInputStream(in);
  7.2BufferInputStream和bufferOutputStream
  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。
  BufferInputstream定义了两种构造函数
  (1)&&&&&& BufferInputStream b= new BufferInputstream(in);
  (2)&&&&&& BufferInputStream b=new BufferInputStream(in,size)
  第二个参数表示指定缓冲器的大小。
  同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。
  7.3printstream
  用于写入文本或基本类型
  两种构造函数方法:
  PrintStream ps=new PrintStream(out);
  PrintStream ps=new PrintStream(out, autoflush)
  第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。
  八.字符流的读取和写入
  java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Reader 体系结构
(1)&&&&&& FileReader
  FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:
  --将文件名作为字符串
  FileReader f=new FileReader(“c:/temp.txt”);
  --构造函数将File对象作为其参数。
  File f=new file(“c:/temp.txt”);
  FileReader f1=new FileReader(f);
  --构造函数将FileDescriptor对象作为参数
  FileDescriptor() fd=new FileDescriptor()
  FileReader f2=new FileReader(fd);
  (2)&&& charArrayReader
  将字符数组作为输入流,构造函数为:
  public CharArrayReader(char[] ch);
  (3)&&& StringReader
  读取字符串,构造函数如下:
  public StringReader(String s);
  (4)&&& InputStreamReader
  从输入流读取字节,在将它们转换成字符。
  Public inputstreamReader(inputstream is);
  (5)&&& FilterReader
  允许过滤字符流
  protected filterReader(Reader r);
(6)&&& BufferReader
  接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。
  Public BufferReader(Reader r);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Writer类体系结构
(1)&&&&&& FileWrite
  将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。
  Public FileWrite(file f);
  (2)chararrayWrite()
  将字符缓冲器用作输出。
  Public CharArrayWrite();
  (3)&&& PrintWrite
  生成格式化输出
  public PrintWriter(outputstream os);
  (4)&&& filterWriter
  用于写入过滤字符流
  protected FilterWriter(Writer w);
FilterOutputStream的种类
构造函数的参数
DataOutputStream
与DataInputStream配合使用,这样你就可以用一种&可携带的方式(portable fashion)&往流里写primitive了(int, char, long,等)
OutputStream
包括写入primitive数据的全套接口。
PrintStream
负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的,而PrintStream负责数据的显示。
一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。
应该是OutputStream对象的最终包覆层。用的机会很多。
BufferedOutputStream
用 这个类解决&每次往流里写数据,都要进行物理操作&的问题。也就是说&用缓冲区&。用flush( )清空缓冲区。
OutputStream, 以及一个可选的缓冲区大小
本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。
  DataInputStream类对象可以读取各种类型的数据。
  DataOutputStream类对象可以写各种类型的数据;
  创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:
  FileInputStream in=new FileInputStream(&d:/abc.txt&);
  DataInputStream din=new DataInputStream(in);
  7.2BufferInputStream和bufferOutputStream
  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。
  BufferInputstream定义了两种构造函数
  (1)&&&&&& BufferInputStream b= new BufferInputstream(in);
  (2)&&&&&& BufferInputStream b=new BufferInputStream(in,size)
  第二个参数表示指定缓冲器的大小。
  同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。
  7.3printstream
  用于写入文本或基本类型
  两种构造函数方法:
  PrintStream ps=new PrintStream(out);
  PrintStream ps=new PrintStream(out, autoflush)
  第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:113796次
积分:3473
积分:3473
排名:第7389名
原创:202篇
转载:254篇
(2)(41)(26)(27)(17)(61)(72)(123)(49)(16)(26)(1)

我要回帖

更多关于 中国移动流量套餐 的文章

 

随机推荐