字节作为数据的一种表现形式可以与其他的数据表现形式转换
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
相关推荐
总的来说,ByteArrayInputStream和ByteArrayOutputStream是Java中处理字节数组输入输出的便捷工具,它们在处理小规模数据、内存中操作以及测试场景下非常实用。理解并熟练掌握这两个类的用法,对于提升Java IO编程...
在Java编程中,我们经常会遇到需要将字节数组转换为输入流的情况,这时ByteArrayInputStream就派上了用场。它的构造函数接受一个byte数组作为参数,然后我们可以调用read()方法来逐个读取字节,或者使用read(byte[])...
在Java中,输入输出流可以分为两大类:字节流(Byte Stream)和字符流(Character Stream)。 1. 字节流(Byte Stream) 字节流是Java中的基本输入输出流,用于读写二进制数据。常用的字节流类有: * ...
Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它主要用于程序与外部资源之间的数据传输。在Java中,I/O流的概念被用来抽象各种输入源和输出目标,包括键盘、显示器、文件、网络连接等。I/O流的设计遵循...
除了基本的文件操作,Java IO还包含了许多其他流,如内存操作流(如`ByteArrayInputStream`和`ByteArrayOutputStream`)、管道流(`PipedInputStream`和`PipedOutputStream`)、系统级别的IO支持(如`System.in`, `...
- 按数据来源分类,有文件流、字节数组流、字符数组流、字符串流以及网络数据流等。 - 按是否格式化输出,有格式化的 `PrintStream` 和 `PrintWriter` 类。 - 按是否缓冲,有缓冲流如 `BufferedInputStream` 和 `...
Java 输入输出流是Java编程语言中用于处理数据输入和输出的核心机制。在Java中,输入输出流被设计成一种抽象的概念,允许程序处理各种不同类型的输入源和输出目标,包括文件、网络连接、内存缓冲等。Java.io 包提供...
Java的IO(Input/Output)...理解并熟练运用这些概念,可以帮助开发者高效地处理数据输入输出,无论是文件操作还是网络通信,都能得心应手。通过阅读《IO输入输出流》.ppt,你将进一步了解这些知识点的具体应用和示例。
- 字节流分为输入流和输出流,分别用于数据的读取和写入。Java中的InputStream和OutputStream是所有字节输入流和输出流的基类。 - 字节流通常用于处理二进制数据,如图片、音频、视频文件等,因为它们的数据结构...
数组流(ByteArrayInputStream, ByteArrayOutputStream)允许我们将字节数组视为流,方便数据的转换和存储。数据流(DataInputStream, DataOutputStream)则支持基本数据类型的读写,如int、float等,确保数据在网络...
- **字节数组流**:ByteArrayInputStream和ByteArrayOutputStream用于在内存中操作字节数组。例如,可以通过ByteArrayOutputStream创建一个字节数组,然后通过ByteArrayInputStream读取该数组。 Java IO流体系结构...
数组流(ByteArrayInputStream, ByteArrayOutputStream)允许直接在字节数组之间进行I/O操作,而字符串流(StringReader, StringWriter)则方便在字符串与输入/输出流之间转换。 数据流(DataInputStream, ...
在Java编程中,输入输出流(Input/Output Stream)是处理数据传输的核心机制,主要用于程序与外部世界的交互,包括读取文件、网络通信、标准输入输出等。Java的`java.io`包提供了丰富的类和接口,使得开发者能够方便...
Java的输入输出流(Input/Output Stream)是Java平台核心API的重要组成部分,它为程序提供了处理数据传输的基础框架。在Java中,一切I/O操作都基于流,流充当了数据从一个地方到另一个地方的通道。这篇博文将深入...
在Java中,字节流分为两种类型:输入字节流(InputStream)和输出字节流(OutputStream)。它们分别用于读取和写入数据。字节流通常用于处理非文本文件,因为这些文件由一系列字节组成,而不是字符。 要实现字节流...
ByteArrayInputStream是一个从内存中读取字节数组的流,而ByteArrayOutputStream是一个将所有的字节数组全部写入内存中的流。 下面是一个使用ByteArrayOutputStream将所有的字节数组全部写入内存中的示例代码: ``...
### Java 输入输出流详解 #### 一、I/O流概述 在Java中,输入输出流是处理文件读写、网络通信等数据...以上是关于Java输入输出流的一些基础概念和使用方法的详细介绍,希望对你理解和应用Java输入输出流有所帮助。
在Java中,我们可以使用`FileInputStream`读取图片文件,然后用`BufferedImage`对象来处理图像,最后通过`ImageIO.write()`方法将图像写入`ByteArrayOutputStream`,得到字节数组。 ```java import javax.imageio....