/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
* 当然也是可以读字符串的。
*/
/* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/
public String readString1()
{
try
{
//FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
FileInputStream inStream=this.openFileInput(FILE_NAME)
ByteArrayOutputStream bos = new ByteArrayOutputStream()
byte[] buffer=new byte[1024]
int length=-1
while( (length = inStream.read(buffer) != -1)
{
bos.write(buffer,0,length)
// .write方法 SDK 的解释是 Writes count bytes from the byte array buffer starting at offset index to this stream.
// 当流关闭以后内容依然存在
}
bos.close()
inStream.close()
return bos.toString()
// 为什么不一次性把buffer得大小取出来呢?为什么还要写入到bos中呢? return new(buffer,"UTF-8") 不更好么?
// return new String(bos.toByteArray(),"UTF-8")
}
}
方式二
// 有人说了 FileReader 读字符串更好,那么就用FileReader吧
// 每次读一个是不是效率有点低了?
private static String readString2()
{
StringBuffer str=new StringBuffer("")
File file=new File(FILE_IN)
try {
FileReader fr=new FileReader(file)
int ch = 0
while((ch = fr.read())!=-1 )
{
System.out.print((char)ch+" ")
}
fr.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
System.out.println("File reader出错")
}
return str.toString()
}
方式三
/*按字节读取字符串*/
/* 个人感觉最好的方式,(一次读完)读字节就读字节吧,读完转码一次不就好了*/
private static String readString3()
{
String str=""
File file=new File(FILE_IN)
try {
FileInputStream in=new FileInputStream(file)
// size 为字串的长度 ,这里一次性读完
int size=in.available()
byte[] buffer=new byte[size]
in.read(buffer)
in.close()
str=new String(buffer,"GB2312")
} catch (IOException e) {
// TODO Auto-generated catch block
return null
e.printStackTrace()
}
return str
}
/*InputStreamReader+BufferedReader读取字符串 , InputStreamReader类是从字节流到字符流的桥梁*/
/* 按行读对于要处理的格式化数据是一种读取的好方式 */
private static String readString4()
{
int len=0
StringBuffer str=new StringBuffer("")
File file=new File(FILE_IN)
try {
FileInputStream is=new FileInputStream(file)
InputStreamReader isr= new InputStreamReader(is)
BufferedReader in= new BufferedReader(isr)
String line=null
while( (line=in.readLine())!=null )
{
if(len != 0) // 处理换行符的问题
{
str.append("\r\n"+line)
}
else
{
str.append(line)
}
len++
}
in.close()
is.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return str.toString()
}
import java.util.*import java.io.*
class Main{
static public void main(String[] str)throws Exception{
File f=new File("1.txt")
write(f,1024*1024)//写文件
read(f)
}//main
static public void write(File f,long length)throws Exception{
long begin=System.currentTimeMillis()
PrintWriter p=new PrintWriter(f)
for(long l=0l<lengthl++){
char c=(char)(int)(Math.random()*70+40)
p.print(c)
}
long end=System.currentTimeMillis()
System.out.println("Write "+length+"char OK! Time:"+(end-begin))
}
static public void read(File f)throws Exception{
long begin=System.currentTimeMillis()
Scanner s=new Scanner(f)
while(s.hasNext()){
s.next()
}
long end=System.currentTimeMillis()
System.out.println("Read OK!Time:"+(end-begin))
}
}//class
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)