![](/img/trans.png)
[英]How to resolve java.io.IOException: Read error at java.io.FileInputStream.read(Native Method)?
[英]FileInputStream.read throws java.io.IOException: Result too large
我有一個臨時文件
File myTmpFile = File.createTempFile( prefix, suffix );
代表通過導出的xml
Preferences.exportSubtree(OutputStream);
現在我想用以下方式導入該文件:
Preferences.importPreferences( new FileInputStream( myTmpFile ));
但是,Stream拋出了帶有Message(“ Result too large”)的IOException。
這是什么意思? 我怎樣才能解決這個問題?
java.io.IOException: Result too large
at java.io.FileInputStream.read(Native Method)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2932)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:704)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
at java.util.prefs.XmlSupport.loadPrefsDoc(XmlSupport.java:233)
at java.util.prefs.XmlSupport.importPreferences(XmlSupport.java:182)
at java.util.prefs.Preferences.importPreferences(Preferences.java:1236)
at MyPreferences.importPrefs(MyPreferences.java:322)
public static void importPrefs(File file){
FileInputStream is = null;
try {
is = new FileInputStream(file);
java.util.prefs.Preferences.importPreferences( is );
} catch( FileNotFoundException e ) {
} catch( IOException e ) {
e.printStackTrace();
} catch( InvalidPreferencesFormatException e ) {
} finally {
if (is != null) {
try {
is.close();
} catch( IOException e ) {
}
}
}
}
在嘗試從InputStream讀取之前,請確保它沒有關閉。
所以我自己解析。 使用org.w3c.dom.ls.DOMImplementationLS
。
但是我需要從java.util.prefs.XmlSupport
中使用的java.util.prefs.Preferences
復制EntityResolver
。 而且有效。
InputStream parsingStream = new FileInputStream(file)
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.setEntityResolver(new Resolver());
Document doc = builder.parse( parsingStream );
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DOMImplementationLS domImplementationLS = (DOMImplementationLS)doc.getImplementation().getFeature( "LS", "3.0" );
LSOutput lsOutput = domImplementationLS.createLSOutput();
lsOutput.setByteStream( outputStream );
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
lsSerializer.write( doc, lsOutput );
byte[] byteArray = outputStream.toByteArray();
ByteArrayInputStream importStream = new ByteArrayInputStream( byteArray );
Preferences.importPreferences( importStream );
/**
* For loading an XML document from specified input stream, which must have the requisite DTD URI.
* @see java.util.prefs.XmlSupport.Resolver
*/
private static class Resolver implements EntityResolver {
@Override
public InputSource resolveEntity(String pid, String sid)
throws SAXException {
if (sid.equals(PREFS_DTD_URI)) {
InputSource is;
is = new InputSource(new StringReader(PREFS_DTD));
is.setSystemId(PREFS_DTD_URI);
return is;
}
throw new SAXException("Invalid system identifier: " + sid);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.