黑马程序员技术交流社区

标题: 学习java的IO流遇到问题 [打印本页]

作者: 天山    时间: 2014-4-20 16:53
标题: 学习java的IO流遇到问题
第9、10行的代码搞不懂
String s = new String();   是创建的字符串数组还是字符串对象?
String s  = new String(buffer);  buffre放在String的构造函数里是什么意思??






QQ截图20140420165117.png (113.68 KB, 下载次数: 21)

QQ截图20140420165117.png

作者: 织语不如书    时间: 2014-4-20 17:02
汗……
这不就是调用String的构造方法String(byte[])把字节数组转化成字符串么……
当然是创建字符串对象,字符串数组是String[]
作者: 悠然丶    时间: 2014-4-20 17:05
String s = new String();   
查看API文档可以发现String类既有无参构造i函数,也有有参构造函数!  这句话就是获取String类对象
String s  = new String(buffer);  
buffer 是你定义的byte[] 数组的引用
API中有这个构造方法  String(byte[] arr)    把传入的字节数组转成字符串
不知道你懂了没啊~

作者: 孙旌棋    时间: 2014-4-20 17:11
最开始我也不理解这个, 写的多了, 就明白了, String的构造函数可以传的参数, 见下面代码注释行, 这里你的buffer很明显就是byte[] 的啊, 当让是可以传递进去的啊
  1. public class SunJingQi {
  2.        
  3.         public static void main(String[] args) {       
  4.                
  5.                 char[] chs = { 'S', 'u', 'n', 'J', 'i', 'n', 'g', 'Q', 'i' };
  6.                
  7. //                String(char[] value)
  8. //                String(char[] value, int offset, int count)
  9. //                static String copyValueOf(char[] data)
  10. //                static String copyValueOf(char[] data, int offset, int count)
  11. //                char[] toCharArray()
  12.                
  13. //                String(byte[] bytes)
  14. //                String(byte[] bytes, int offset, int length)
  15. //                byte[] getBytes()
  16.                
  17. //                static String valueOf(boolean b)
  18. //                static String valueOf(char[] data)
  19.                
  20.                 String s1 = new String(chs, 3, 4);        // 构造函数
  21.                 sop("s1=" + s1);
  22.                 sop(String.copyValueOf(chs));                // 静态方法

  23.                 String s2 = "SunJingQi";
  24.                 char[] chs2 = s2.toCharArray();
  25.                 for (int x = 0; x < chs2.length; x++) {
  26.                         sop("chs2=" + chs2[x]);
  27.                 }

  28.                 byte[] b = { 127 };// -128~127,最高位为符号位
  29.                 String s3 = new String(b);
  30.                 sop("s3=" + s3);
  31.                 byte[] s4 = s2.getBytes();
  32.                 for (int x = 0; x < s4.length; x++) {
  33.                         sop("byte=" + s4[x]);
  34.                 }

  35.                 sop(String.valueOf(chs));
  36.         }

  37.         public static void sop(Object obj) {
  38.                 System.out.println(obj);
  39.         }

  40. }
复制代码

作者: wconho    时间: 2014-4-20 17:12
String s = new String():创建String对象,创建String型数组使用:String[] a = new String[12];或String a = new String[]{"a","b"};

String s  = new String(buffer);意思是使用String类构造函数:String(byte[] bytes),将字节数组转为字符串,调用String类的toString方法将字符串打印出来。
作者: idream    时间: 2014-4-21 11:07
这里的buffer不是byte[]数组 ,将byte[]数组传入String的构造函数中,将byte[]数组转换成字符串。
扩展还有两种方法可以将数组转换成字符串
第一种:String  valueOf(char[])
第二种:static String copyValueOf(char[])  //静态方法,类名可以调用
区别:构造函数可以传入的参数是char[] 和 byte[]
       而:valueOf(char[])   copyValueOf(char[])   可以传入的参数只能是char[],不能传入byte[]
作者: 秦久启    时间: 2014-4-21 11:46
String s = new String();  这个当然是创建字符串对象,如果有什么疑问的话,请查看API文档,在java.lang里面有String类。


String s  = new String(buffer);  buffre放在String的构造函数里是什么意思??
解释:
fis.read(bufffer,0,buffer.length);这个是将f:/a.txt里面的内容读取到数组里面(其实这里我不建议你使用字节流来操作文本数据,建议使用字符流)
String s  = new String(buffer);就是将buffer字节数组转变成字符串,然后将其打印,由于String类里面覆写了Object类里面的toString()方法
所以System.out.println(s);就可以了。

作者: 为梦想而活着    时间: 2014-4-21 15:59
以上几位已经解释的可以了,大概的就是要把buffer中的字节流转换成字符流输出,如果还不明白请查看API文档即可




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2