在網(wǎng)上找到的原因是這樣的:
這個(gè)問題產(chǎn)生的原因是IBM在JDK 1.4版本中為了追求對(duì)io通道的高效率改變了JDK 1.3中對(duì)io通道中異常處理的策略。IBM JDK 1.4中對(duì)于io通道的異常處理更加嚴(yán)格,因此系統(tǒng)中會(huì)報(bào)上面的錯(cuò)誤。
解決這一問題的辦法是不使用IBM JDK 1.4中默認(rèn)的io通道,而使用nio通道。具體的做法如下:
1.打開管理控制臺(tái),找到并選擇運(yùn)行這個(gè)JSP的應(yīng)用服務(wù)器
2.依次選擇進(jìn)程定義,java虛擬機(jī),一般JVM自變量
3.添加-Dibm.stream.nio=true
4.確定,保存
5.重新啟動(dòng)該服務(wù)器
本來我就懷疑又是IBM JDK的問題,果然被我不幸言中了,再次表示一下郁悶!
我發(fā)現(xiàn)在我需要讀取的文件當(dāng)中存在這樣的一些亂碼字符
我原來是用下面這段程序讀取這個(gè)文件的內(nèi)容并打印的:
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String str="";
String result = "";
while((str=br.readLine())!=null){
result += str + "\n";
}
即逐行讀取的方法,我想也是一般的方法,但是就是這個(gè)readline方法導(dǎo)致了IBM JDK 1.4.2 報(bào)了這個(gè)
sun.io.MalformedInputException的問題.
我現(xiàn)在使用的解決方法如下:
String result = "";
StringBuffer sBuffer=new StringBuffer();
FileInputStream fis=new FileInputStream(file);
BufferedInputStream bis=new BufferedInputStream(fis);
String tempStr;
byte[] b = new byte[1024];
int i = 0;
while ((i = bis.read(b)) > 0) {
tempStr=new String(b,0,i);
sBuffer.append(tempStr);
}
result = sBuffer.toString();
即逐字節(jié)讀取的方法.這樣處理就可以正常讀取了!
具體到底為什么會(huì)出現(xiàn)這種問題現(xiàn)在還沒弄明白,估計(jì)也弄不明白了!