`

字节,字节数组输入输出流ByteArrayInputStream,ByteArrayOutputStream理解

    博客分类:
  • java
 
阅读更多

 

 

字节作为数据的一种表现形式可以与其他的数据表现形式转换

1 字节理解 

2 字节与人类语言字符串转换 (new String(byte[] s) ,String.toBytes() )

3  文件与字节转换

从另一方面讲,任何东西都可以转为最小单位字节,然后做最终处理。

 

以下自己学习得到的观点,有错误的地方请指出

在通常操作用,字节接触的比较少,这里对于字节的理解进行深入学习

   1 字节是网络传输的最小单元(个人认为,自己最重要的作用,网络传输的数据包可能就是字节)

   2 网络传输过后要对字节进行编码(即不同语言规定几个字节为一个字符切分)

   3 上面得到字节序列,组合即为字符串(字符串通常是我们人所看的语言)

 

ByteArrayInputStream

ByteArrayOutputStream  

字节输入流和字节输出流 

1 因为网络传输的过程中是字节,有的时候我们可以用字节输入流来保存传输过程的输入包,然后切分字节使用 

2 有时候需要将一个文件变成字节处理,可以用将数据写到字节输出流中 

 

文件变为字节:

  

FileInputStream fis=new FileInputStream("test");
BufferedInputStream bis=new BufferedInputStream(fis);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int c=bis.read();//读取bis流中的下一个字节
while(c!=-1){
     baos.write(c);
     c=bis.read();
}
bis.close();
byte retArr[]=baos.toByteArray(); 

 

 

 

流的使用:以下为个人理解

流分类:节点流和处理流 

节点流为直接与索要读取数据终端链接的流(如FileInputStream:直接从文件中读取,ByteArrayOutputStream : 直接从字节数组中读取,ObjectInputStream:直接从Object中读取等等 )

处理流为在节点流基础上添加新功能的流:(如DataInputStream 使流可以直接读出各种类型的数据,BufferedInputStream :使流具有缓冲功能,读取速度变快。)

 

一些测试代码:

 

字节流的使用:

	//字节输入输出 
	private static void testByteArrayStram() throws IOException{
		
		String inputStr = "我叫 唐三藏";
		byte[] bs = inputStr.getBytes(); 
		ByteArrayInputStream is = new ByteArrayInputStream(bs);
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		long start = System.currentTimeMillis();
		byte[]  buf = new byte[1024];
		int len=0 ; 
		long start1 = System.currentTimeMillis();
		while ( (len=is.read(buf, 0, buf.length))!=-1) {
//			 System.out.println( new String(buf ));
			 os.write( buf);
		}
		System.out.println(start1-System.currentTimeMillis()  );
		os.write(bs ); 
		System.out.println( os.toString());
//		System.out.println( os.);	
		
	}

 

字节流带有缓冲区:

	//带有缓冲流的 
	private static void testFileInput() throws IOException{
		FileInputStream fis = new FileInputStream(new File("E:\\study\\Hadoop权威指南++中文版.pdf"));
		BufferedInputStream bis = new BufferedInputStream( fis ); 
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		
		byte[] buf = new byte[1024];
		long len = 0 ; 
		long start  = System.currentTimeMillis() ; 
		while((len=bis.read(buf, 0, buf.length))!=-1){
			bos.write( buf ) ;
		}
		System.out.println(  System.currentTimeMillis() -start );
//		System.out.println( bos.toString() ); 
		bis.close() ;
		bos.close() ;
		 
	}

  

文件流使用:

 

	//无缓冲流的 
	private static void testFileInput2() throws IOException{
		FileInputStream fis = new FileInputStream(new File("E:\\study\\线程笔记20140606.docx"));
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
//		FileOutputStream out = new FileOutputStream(new File("E:\\study\\线程笔记1测试.docx") );
		
		byte[] buf = new byte[1024];
		long len = 0 ; 
		long start  = System.currentTimeMillis() ; 
		while((len=fis.read(buf, 0, buf.length))!=-1){
			bos.write( buf ) ;
		}
		System.out.println(  System.currentTimeMillis() -start );
//		System.out.println( bos.toString() ); 
//		bos.writeTo( out ) ; //写入到 字节输出流中的字节,在写到另一个文档中不是乱码
		
		fis.close() ;
		bos.close() ;
//		out.close();
	}	

 

 

 

 

 参考:http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html

 

 

 

分享到:
评论
1 楼 浮生一如梦 2018-06-07  
[b][i][u]
[list]
[*][img][url][flash=200,200][url][flash=200,200][*][*]
  • [*]
    [flash=200,200][url][img][list]
    [*]
    引用
    [/list][/img][/url][/flash]
    [/flash][/url][/flash][/url][/img][/list]
    [/quot
    [color=orange][/color]
    e][/u][/i][/b]   

    相关推荐

      详解Java中ByteArray字节数组的输入输出流的用法

      ByteArrayInputStream和ByteArrayOutputStream分别集成自InputStream和OutputStream这两个输入和输出流,这里我们就来详解Java中ByteArray字节数组的输入输出流的用法,需要的朋友可以参考下

      【IT十八掌徐培成】Java基础第16天-04.ByteArrayInputStream-ByteArrayOutputStream.zip

      【IT十八掌徐培成】Java基础第16天-04.ByteArrayInputStream-ByteArrayOutputStream.zip

      IO体系.java

      |--ByteArrayInputStream/:字节数组输入流。操作的都是内存中的数组,所以不需要关闭。把数组封装到流中,可以提供更多的方法操作数组。 | |--SequenceInputStream/:序列流。将多个读取流合并成一个读取流,可以...

      Java之IO流学习总结

      3.字节流的输入与输出的对应 图中蓝色的为主要的对应部分,红色的部分就是不对应部分。紫色的虚线部分代表这些流一般要搭配使用。从上面的图中可以看出Java IO 中的字节流是极其对称的。“存在及合理”我们看看...

      JDK_API_1_6

      ByteArrayOutputStream 此类实现了一个输出流,其中的数据被写入一个 byte 数组。 CharArrayReader 此类实现一个可用作字符输入流的字符缓冲区。 CharArrayWriter 此类实现一个可用作 Writer 的字符缓冲区。 ...

      java72-java-advance.rar

      3. ByteArrayOutputStream将下列哪一项作为输出流 C a) 字符b)字节c)字节数组D)对象 4. 下列流中哪一个使用了缓冲区技术A A.BuffereOutputStream B. FileInputStream C. DataOutputStream D.FileReader 5....

      跟汤老师学Java(第15季):I/O输入输出流

       输入流、输出流  字节流、字符流  节点流、包装流 4.字节流  InputStream:FileInputStream、ByteArrayInputStream、ObjectInputStream  OutputStream:FileOutputStream、ByteArrayOutputStream、...

      IO流各个类的使用方法

      【字节流】 InputStream OutputStream FileInputStream FileOutputStream DataInputStream DataOutputStream BufferedInputStream BufferedOutputStream ObjectInputStream ObjectOutputStream ByteArrayInputStream...

      教你彻底明白Java的IO系统

      1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用 2) StringBufferInputStream:把一个String对象作为InputStream 3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作 4) ...

      Java程序设计语言期末试题

      1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2) FileOutputStream:把信息存入文件中 3) PipedOutputStream:实现了pipe的概念,主要在线程中使用 4) SequenceOutputStream:把多个OutStream合并为一...

      验证码生成工具

      corejava 实现验证码随机生成 public static InputStream change(BufferedImage image)... //将bos中存储的JPEG格式图片字节取出 byte[] bytes = bos.toByteArray(); return new ByteArrayInputStream(bytes); }

      android xml文件操作

      根据字节输入流获取一个Document对象。 * * @param is * 获取对象的字节输入流。 * @return 返回获取到的Document对象。如果出现异常,返回null。 * @throws IOException * 如果发生任何 IO 错误时抛出...

    Global site tag (gtag.js) - Google Analytics