关于java进阶_Java 的进阶之路一

Java 的进阶之路一

一、实例化File对象

File file = new File(fileLocation);//这里的fileLocation就是一个字符串,指的是文件的目录放在哪里,一个地址

FileInputStream input = new FileInputStream(file);//把文件放进输入流中

File file= newFile(fileLocation);

FileOutputStream fos=new FileOutputStream(file);//把文件放入输出流中

二、String,StringBuilder以及StringBuffer这三个类的区别

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:

1 String str="abc";2System.out.println(str);3 str=str+"de";4 System.out.println(str);

如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

1 String str="abc"+"de";2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");3 System.out.println(str);4 System.out.println(stringBuilder.toString());

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder

总结一句话:这三者创建的都是对象,但是只有string创建后不可以再修改,只能赋值完之后被回收,但是其他两个可以用函数append去追加新的字符串,例如StringBuilder stringBuilder=new StringBuilder().append("abc").//这里注意append里写的是string类型的,如果是byte【】字节型数组类型的对象是要转化成string类型的对象例如append(new String(bt))

三、byte[]类和string类的转化

String string = "hello world";

byte[] bytes = string.getBytes(); //Convert to byte[]

String s = new String(bytes); //Convert back to String

byte这个其实是整数类型的,string字符串里的字符都有自己的ASSCLL码,可以转换

四、读read()函数用法

从 BufferedReader 对象读取一个字符要使用 read() 方法,它的语法如下:

int read( ) throws IOException

每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。该方法抛出 IOException。

当然int count=input.read(bt);//input是

FileInputStream文件输入流的类

//bt是byte[] bt

这里的read函数就是把bf里的东西用bt读出来后返回一个int型的数字,若为-1则说明流结束。

int count = 0;while((count = input.read(bt))!=-1) {

bf.append(new String(bt)).append("\n");

}

Bt是byte[]字符型数组,bf是stringbuffer的对象

五、写write()函数用法

public void write(byte[] w)

把指定数组中w.length长度的字节写到OutputStream中。

所以里面必须是字节型数组,所以如果你想放的原来是一个字符串的话,那么就要转化成字节型数组.getbytes();

六、字符流BufferedReader

BufferedReader可以用来读取文件或者接收来自键盘(控制台)的信息。它比Scanner更加快捷,能够大幅度缩短程序运行时间。它下面的readline()方法可以一次性读取一行文字(String),非常方便。需要注意的是,使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception)。以及,在使用完BufferredReader以后,需要用close()方法关闭流。

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

一般用法:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));

String data= null;while((data = br.readLine())!=null)

{

System.out.println(data);

}

byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。

下面用实例来比较一下二者的区别:1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128—127 的数;如:char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别System.out.println(c);byte d1 = 1;byte d2 = -1;byte d3 = 127; // 如果是byte d3 = 128;会报错byte d4 = -128; // 如果是byte d4 = -129;会报错

2、char可以表中文字符,byte不可以,如:char e1 = '中', e2 = '国';byte f= (byte) '中'; //必须强制转换否则报错

3、char、byte、int对于英文字符,可以相互转化,如:byte g = 'b'; //b对应ASCII是98char h = (char) g;char i = 85; //U对应ASCII是85int j = 'h'; //h对应ASCII是104

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值