脚本宝典收集整理的这篇文章主要介绍了37字符流,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
1.1 为什么会出现字符流【理解】
- 字符流的介绍
由于字节流操作中文不是特别的方便,所以Java就提供字符流
字符流 = 字节流 + 编码表
- 中文的字节存储方式
用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接
成中文,如何识别是中文的呢?
汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数
1.2 编码表【理解】
1.3 字符串中的编码解码问题【应用】
方法名 |
说明 |
byte[] getBytes() |
使用平台的默认字符集将该 String编码为一系列字节 |
byte[] getBytes(String charsetName) |
使用指定的字符集将该 String编码为一系列字节 |
String(byte[] bytes) |
使用平台的默认字符集解码指定的字节数组来创建字符串 |
String(byte[] bytes, String charsetName) |
通过指定的字符集解码指定的字节数组来创建字符串 |
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWrITer osw = new OutputStreamWriter(new
FileOutputStream("myCharStream\osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\osw.txt"),"GBK");
osw.write("中国");
osw.close();
//InputStreamReader isr = new InputStreamReader(new
FileinputStream("myCharStream\osw.txt"));
InputStreamReader isr = new InputStreamReader(new
FileInputStream("myCharStream\osw.txt"),"GBK");
//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1) {
System.out.PRint((char)ch);
} i
sr.close();
}
}
1.4 字符流中的编码解码问题【应用】
- 字符流中和编码解码问题相关的两个类
- InputStreamReader:是从字节流到字符流的桥梁
它读取字节,并使用指定的编码将其解码为字符
它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
- OutputStreamWriter:是从字符流到字节流的桥梁
是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节
它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
InputStreamReader(InputStream in) |
使用默认字符编码创建InputStreamReader对 象 |
InputStreamReader(InputStream in,String charset) |
使用指定的字符编码创建InputStreamReader 对象 |
OutputStreamWriter(OutputStream out) |
使用默认字符编码创建OutputStreamWriter对 象 |
OutputStreamWriter(OutputStream out,String charset) |
使用指定的字符编码创建OutputStreamWriter 对象 |
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter osw = new OutputStreamWriter(new
FileOutputStream("myCharStream\osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new
FileOutputStream("myCharStream\osw.txt"),"GBK");
osw.write("中国");
osw.close();
//InputStreamReader isr = new InputStreamReader(new
FileInputStream("myCharStream\osw.txt"));
InputStreamReader isr = new InputStreamReader(new
FileInputStream("myCharStream\osw.txt"),"GBK");
//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1) {
System.out.print((char)ch);
} i
sr.close();
}
}
1.5 字符流写数据的5种方式【应用】
方法名 |
说明 |
void write(int c) |
写一个字符 |
void write(char[] cbuf) |
写入一个字符数组 |
void write(char[] cbuf, int off, int len) |
写入字符数组的一部分 |
void write(String str) |
写一个字符串 |
void write(String str, int off, int len) |
写一个字符串的一部分 |
方法名 |
说明 |
flush() |
刷新流,之后还可以继续写数据 |
close() |
关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
/*
构造方法:
OutputStreamWriter(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter
写数据的5种方式:
void write(int c):写一个字符
void write(char[] cbuf):写入一个字符数组
void write(char[] cbuf, int off, int len):写入字符数组的一部分
void write(String str):写一个字符串
void write(String str, int off, int len):写一个字符串的一部分
*/
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\osw.txt"));
//void write(int c):写一个字符
// osw.write(97);
// void flush():刷新流
// osw.close();
//void write(char[] cbuf):写入一个字符数组
char[] chs = {'a', 'b', 'c', 'd', 'e'};
// osw.write(chs);
//void write(char[] cbuf, int off, int len):写入字符数组的一部分
// osw.write(chs, 1, 3);
//void write(String str):写一个字符串
// osw.write("abcde");
//void write(String str, int off, int len):写一个字符串的一部分
osw.write("abcde", 1, 3);
//释放资源
osw.close();
//Exception in thread "main" java.io.IOException: Stream closed
// osw.write(100);
}
}
1.6 字符流读数据的2种方式【应用】
方法名 |
说明 |
int read() |
一次读一个字符数据 |
int read(char[] cbuf) |
一次读一个字符数组数据 |
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new
FileInputStream("myCharStream\ConversionStreamDemo.java"));
//int read():一次读一个字符数据
// int ch;
// while ((ch=isr.read())!=-1) {
// System.out.print((char)ch);
// }
//int read(char[] cbuf):一次读一个字符数组数据
char[] chs = new char[1024];
int len;
while ((len = isr.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
} /
/释放资源
isr.close();
}
}
脚本宝典总结
以上是脚本宝典为你收集整理的37字符流全部内容,希望文章能够帮你解决37字符流所遇到的问题。
如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。