package com.cgb.train.core.nio; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; /** * 字符数组、字节数组、字符缓冲、字节缓冲的相互转换工具类 * @author cgb * */ public class ByteCharUtils { /** * 字节数组转换为字符缓冲 * @param bytes * @param encoding * @return */ public CharBuffer bytesToCharBuffer(byte[] bytes,String encoding){ ByteBuffer byteBuffer=ByteBuffer.wrap(bytes); return Charset.forName(encoding).decode(byteBuffer); } /** * 字符数组转换为字节缓冲 * @param chars * @param encoding * @return */ public static ByteBuffer charsToByteBuffer(char[] chars,String encoding){ CharBuffer charBuffer=CharBuffer.wrap(chars); return Charset.forName(encoding).encode(charBuffer); } /** * 字符串转换为字节缓冲 * @param str * @param encoding * @return */ public static ByteBuffer stringToByteBuffer(String str,String encoding){ /* CharBuffer charBuffer=CharBuffer.wrap(str); Charset.forName(encoding).encode(charBuffer);*/ return Charset.forName(encoding).encode(str); } /** * 将字符转为字节(编码) * @param chars * @param encoding * @return */ public static byte[] getBytes (char[] chars,String encoding) { Charset cs = Charset.forName (encoding); CharBuffer cb = CharBuffer.allocate (chars.length); cb.put (chars); cb.flip (); ByteBuffer bb = cs.encode (cb); return bb.array(); } /** * 将字节转为字符(解码) * @param bytes * @param encoding * @return */ public static char[] getChars (byte[] bytes,String encoding) { Charset cs = Charset.forName (encoding); ByteBuffer bb = ByteBuffer.allocate (bytes.length); bb.put (bytes); bb.flip (); CharBuffer cb = cs.decode (bb); return cb.array(); } }
相关推荐
在`SonOfBufferedReader.java`中,可能会扩展`BufferedReader`类来提供自定义的读取字节或字符子数组的功能。 在`testInterface.java`中,可能包含了对这些功能的测试,确保能够正确地从字节数组中获取子数组,并且...
Java提供了两种主要的IO流类型:字节流(Byte Stream)和字符流(Character Stream)。这两个概念是Java IO体系的基础,也是程序员在处理数据传输时经常遇到的工具。本练习文档将帮助你深入理解并熟练掌握这两种流的...
通过选择合适的流类型、使用缓冲流和桥接流,以及利用工具类,开发者可以更好地处理各种数据输入输出需求。在实际项目中,根据数据的类型和需求,灵活运用这些流,将有助于优化代码的效率和可维护性。
字节流的操作通常涉及read()和write()方法,用于读取或写入单个字节,或者read(byte[])和write(byte[])用于读写字节数组。 接下来,我们讨论**字符流**。字符流是Java特有的,因为Java使用Unicode编码,所以字符流...
通过`ByteBuffer.allocate()`分配空间,然后调用`putInt()`将整数写入缓冲区,最后调用`array()`获取字节数组。 - **Float to Byte Array**:类似地,使用`ByteBuffer`的`putFloat()`方法。 - **Double to Byte ...
这个方法通过遍历字符串中的每一个字符,将每两个字符(一个十六进制数字)转换为一个字节,并放入byte数组中。 对于C#,可以使用`System.Convert`类的`FromHex`方法: ```csharp string hexString = "your_hex_...
通常,密钥和向量都需要进行预处理,例如通过`Convert.ToByte()`将字符串转换成字节数组。 3. **创建加密流和解密流**:使用`CryptoStream`类创建加密和解密的流,将这些流附加到文件或内存缓冲区,以便进行读写操作...
`BufferedOutputStream`的`write()`方法可以接受单个字节或字节数组,并将它们写入缓冲区,直到缓冲区满或者调用`flush()`方法时才真正写入文件。 在题目中,有三个练习: - 练习一展示了如何使用`...
5. 使用标准库std::wstring_convert和std::codecvt_utf8类:在C++11及以上版本中,可以利用这些工具进行不同编码间的字符串转换。 GSMEncode.hpp文件可能包含关于GSM编码的信息,GSM编码是一种针对短信服务的7位...
练习二展示了如何用`BufferedOutputStream`写出一个字节数组,也就是字符串转换成字节后的形式。步骤与练习一类似,只是调用了`write(byte[] buff)`方法。 练习三涉及到了文件复制,这是缓冲流的一个典型应用。在这...
这两个流都有它们的顶级抽象类:字节流的`java.io.InputStream`和`java.io.OutputStream`,以及字符流的`java.io.Reader`和`java.io.Writer`。 字节流是最基础的流类型,它可以处理所有类型的数据,因为所有的数据...
3. **生成C代码**:将缓冲区的内容转化为字符常量,如`'\0'`, `'\n'`等,并创建一个字符串,表示数组的初始化值。同时,确保在数组名后面加上正确的维度信息,如`char fileContent[文件大小] = {...};`。 4. **输出...
- `String.getBytes()` 和 `new String(byte[], charsetName)`:将字符串转换为字节数组,或将字节数组转换回字符串,需要指定字符编码。 - `InputStreamReader` 和 `OutputStreamWriter`:它们可以与`InputStream...
本讲义主要探讨的是Java中的字节流和字符流,这是IO操作的基础,也是开发过程中频繁使用的工具。字节流和字符流是Java IO框架的两大支柱,它们分别处理原始的字节数据和经过编码的字符数据。 字节流是Java中处理二...
3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * ...
在Java中,IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节的数据,而字符流则处理Unicode编码的16位字符。 1. **字节流**: - `InputStream` 和 `OutputStream` 是所有...
4. **String的getBytes()和new String(byte[], charset)**:字符串类提供了获取字节数组的方法`getBytes()`,可以指定编码方式;反之,`new String(byte[], charset)`可以根据字节数组和编码创建新的字符串。 5. **...
然后,将字符串转换为字节数组并写入文件,最后关闭流。这样,每次调用此方法,都会在现有内容基础上追加新的数据。 `readFileInputStream`方法用于读取文件内容。同样,它使用`Context.openFileInput()`打开一个`...