java io过程中改变当前字符输入流的编码 40
使用jdk1.6中提供的类和方法,设计一个类或方法,从一个字节输入流中正确的读取输入流的内容。1、软件的IO逻辑是根据读取到的“字符”改变的,不是“字节”!2、给定的字节...
使用jdk1.6中提供的类和方法,设计一个类或方法,从一个字节输入流中正确的读取输入流的内容。
1、软件的IO逻辑是根据读取到的“字符”改变的,不是“字节”!
2、给定的字节流编码是变动的,但在变动前会用采用了前一编码格式的内容提示接下来的内容的编码格式。如:每当读到“下一编码:xxx”那么,在“xxx”之后的字节都将采用“xxx”格式的进行编码。
3、起始的输入流为UTF-8编码,内容长度不确定。
4、所提供的字节流本身不具备mark和reset等功能,需自己缓存数据。
字节流的源:
String[] charset = {"utf-8","gbk","gb2312","unicode"};
String rdStr = "这是随机的文字序列123,包含重要信息的字符串结构,有字符判断处理,这是随机的文字序列¥……";
OutputStream out = getOutputStream();
String next = "下一编码:";
Random rand = new Random(System.currentTimeMillis());
int ni = Random.nextInt() % 4,last;
out.write((next+charset[ni]).getBytes(charset[ni]));
out.flush();
int i = 10;
String str = null;
while(i-->0){
str = rdStr.substring(ni, rdStr.length() - ni);
out.write(str.getBytes(charset[ni]));
out.write(str.getBytes(charset[ni]));
last = ni;
ni = rand.nextInt() % 4;
out.write((next+charset[ni]).getBytes(charset[last]));
}
out.flush();
要解析上面这样的流应该如何设计?
ps:越简单越好,不求高效,只希望有一个返回char类型的同步的read()方法以及可以随时改变read()编码的方法,因为高层逻辑要即使的做字符处理并反馈。如果有更好的解决方案,愿洗耳恭听。 展开
1、软件的IO逻辑是根据读取到的“字符”改变的,不是“字节”!
2、给定的字节流编码是变动的,但在变动前会用采用了前一编码格式的内容提示接下来的内容的编码格式。如:每当读到“下一编码:xxx”那么,在“xxx”之后的字节都将采用“xxx”格式的进行编码。
3、起始的输入流为UTF-8编码,内容长度不确定。
4、所提供的字节流本身不具备mark和reset等功能,需自己缓存数据。
字节流的源:
String[] charset = {"utf-8","gbk","gb2312","unicode"};
String rdStr = "这是随机的文字序列123,包含重要信息的字符串结构,有字符判断处理,这是随机的文字序列¥……";
OutputStream out = getOutputStream();
String next = "下一编码:";
Random rand = new Random(System.currentTimeMillis());
int ni = Random.nextInt() % 4,last;
out.write((next+charset[ni]).getBytes(charset[ni]));
out.flush();
int i = 10;
String str = null;
while(i-->0){
str = rdStr.substring(ni, rdStr.length() - ni);
out.write(str.getBytes(charset[ni]));
out.write(str.getBytes(charset[ni]));
last = ni;
ni = rand.nextInt() % 4;
out.write((next+charset[ni]).getBytes(charset[last]));
}
out.flush();
要解析上面这样的流应该如何设计?
ps:越简单越好,不求高效,只希望有一个返回char类型的同步的read()方法以及可以随时改变read()编码的方法,因为高层逻辑要即使的做字符处理并反馈。如果有更好的解决方案,愿洗耳恭听。 展开
1个回答
展开全部
//txt为TextArea内的字符串
try{
InputStream myIn=new ByteArrayInputStream(txt.getBytes());
//将System.in转化为面向字符的流
InputStreamReader ir = new InputStreamReader(myIn);
in = new BufferedReader(ir);//为输入流提供缓冲区
while ((s = in.readLine()) != "bye")
System.out.println("Read: " + s);
}
catch(IOException e)
{System.out.println("Error! ");}
}
从哪里输入字符串啊?
如果从键盘输入,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
in.readLine();
从键盘只能读取一行字符串。
如果从文件输入,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("文件路径")));
String str = null;
while(null != (str = in.readLine())){
//str就是一行 具体操作str的代码写在这里
}
in.close();
就可以读完~
try{
InputStream myIn=new ByteArrayInputStream(txt.getBytes());
//将System.in转化为面向字符的流
InputStreamReader ir = new InputStreamReader(myIn);
in = new BufferedReader(ir);//为输入流提供缓冲区
while ((s = in.readLine()) != "bye")
System.out.println("Read: " + s);
}
catch(IOException e)
{System.out.println("Error! ");}
}
从哪里输入字符串啊?
如果从键盘输入,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
in.readLine();
从键盘只能读取一行字符串。
如果从文件输入,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("文件路径")));
String str = null;
while(null != (str = in.readLine())){
//str就是一行 具体操作str的代码写在这里
}
in.close();
就可以读完~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询