java结果写入html,java - 将长字符串写入HTML文件,InputStream vs FileWriter vs BufferedReader - 堆栈内存溢出...
我对执行此操作的最佳方法有些困惑。 我在SO上看到了很多示例,许多答案有不同的解决方案。 因此,我想知道将非常长的字符串写入新的html文件的最有效方法(即,从字符串中生成html文件)。 并且真的可以将所有内容包装到缓冲区中吗? 喜欢:
fileWriter = new FileWriter(new File(dir, appBook.getPath()));
bufferWritter = new BufferedWriter(fileWriter);
bufferWritter.append(htmlContent);
或者我可以做些什么(而不失去性能)
fileWriter = new FileWriter(new File(dir, appBook.getPath()));
fileWriter .append(htmlContent);
..
这是我现在已经使用了一段时间的方法:
//Will run out of memory if i dont split the string in 650000 chunks
String[] bookPieces = splitString(htmlContent, Math.round(htmlContent.length()/650000));
OutputStream outputStream = null;
InputStream inputStream = null;
try {
outputStream = new FileOutputStream(new File(dir, appBook.getPath())); //.html path
for (String text : bookPieces) {
byte[] theBytes = text.getBytes(Charset.forName("UTF-16"));
inputStream = new ByteArrayInputStream(theBytes);
byte[] bufferData = new byte[1024];
int bytesRead = inputStream.read(bufferData);
while (bytesRead != -1) {
outputStream.write(bufferData, 0, bytesRead); //add the bufferData data to the "new file"
bytesRead = inputStream.read(bufferData); // keep on reading and filling the dynamic byte araay until it returns -1
}
//need to GC the inputsteam myself!!!!
inputStream = null;
}
toReturn = true;
}
比起我,我更倾向于将BufferedReader用于长文本字符串。 所以我改为:
String[] bookPieces = splitString(htmlContent, Math.round(htmlContent.length()/650000));
OutputStream outputStream = null;
InputStream inputStream = null;
OutputStreamWriter oo;
try {
outputStream = new FileOutputStream(new File(dir, appBook.getPath()));
for (String text : bookPieces) {
byte[] theBytes = text.getBytes(Charset.forName("UTF-16"));
inputStream = new ByteArrayInputStream(theBytes);
InputStreamReader iReader = new InputStreamReader(inputStream,Charset.forName("UTF-16"));
BufferedReader bufferedReader = new BufferedReader(iReader);
oo = new OutputStreamWriter(outputStream);
String nextLine;
while ((nextLine = bufferedReader.readLine())!=null) {
oo.write(nextLine);
}
//need to GC the inputsteam myself!!!!
inputStream = null;
}
但是我无法使用该方法正确编码,某些字符会有所不同,例如“ —”变为“〔。 而且我仍然必须将字符串分成多个块,因此我看不到更改的目的(我是用错误的方式实现的吗?请告诉我使用bufferedReader的正确方法)。
...然后我终于找到了两种更快的方法,甚至不需要我将字符串分块成这么多块。
String[] bookPieces = splitString(htmlContent, Math.round(htmlContent.length()/100));
FileWriter fileWriter = null;
BufferedWriter bufferWritter = null;
try {
fileWriter = new FileWriter(new File(dir, appBook.getPath()));
bufferWritter = new BufferedWriter(fileWriter);
//Has to append, if write than OOM.
bufferWritter.append(htmlContent);
toReturn = true;
}
//比起带有Encoding的代码要慢得多
//Need to split large strings in 100 chuncks
String[] bookPieces = splitString(htmlContent, Math.round(htmlContent.length()/100));
BufferedWriter bufferWritter = null;
OutputStreamWriter osw= null;
try {
// Create osw and assign it an Encoding
osw = new OutputStreamWriter(
new FileOutputStream(new File(dir, appBook.getPath())),
Charset.forName("UTF-16"));
bufferWritter = new BufferedWriter(osw);
for (String text : bookPieces) {
bufferWritter.write(text); //write faster than append here
}
toReturn = true;
}
java结果写入html,java - 将长字符串写入HTML文件,InputStream vs FileWriter vs BufferedReader - 堆栈内存溢出...相关推荐
- linux java的启动内存溢出,java - Java的R代码可在Linux上运行,但不能在Windows中运行 - 堆栈内存溢出...
我在做什么? 我正在用Java编写一个数据分析程序,该程序依赖R的arulesViz库来挖掘关联规则. 我想要什么? 我的目的是将规则存储在Java中的String变量中,以便以后进行处理. 它是如何 ...
- if函数中的android,java - 我需要帮助将IF语句方法更改为Android Studio中的SWITCH情况 - 堆栈内存溢出...
我正在Android Studio上的一个项目上工作,并且正在尝试创建过滤器. 我向其中添加了一些Checkboxes ,我想用它过滤我的RecyclerView . 使用IF语句,我可以做到,但是据 ...
- java获取excel文件第一行_java - 在Java中读取Excel文件,但第一行除外 - 堆栈内存溢出...
我正在尝试从使用xlsx文件的JasperReport模板自动创建报告,我用来从excel文件读取的方法是这样的: String[] columnNames = new String[]{" ...
- java图片强绘制表情符号_java - 具有表情符号的Graphics2D.drawString()无法正常工作 - 堆栈内存溢出...
如果我将代码打包为.jar而不是仅使用classpath,则无法正常工作(就像我在IDE中按"播放"一样) 当我使用IDE时,可以使用g2.drawString (使用Apple ...
- java url 双引号_java - Java在POST请求中发送带有转义双引号的JSON字符串[duplicate] - 堆栈内存溢出...
我正在创建一个JSONObject并将JSON字符串发送到POST请求正文中的服务器. public String toJson() { JSONObject filter = new JSONObj ...
- java字符串转语音文件_java - Java文字转语音(Spring Boot) - 堆栈内存溢出
我从事的项目是必须使用SpringBoot生成验证码. 我想要一个"文本到语音"功能,并且声音文件必须使用SpringBoot生成(否则这将是一个巨大的安全问题). 我生成了一个验 ...
- pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...
我正在从n个页面的输入pdf文件中读取特定位置,并在这些位置上列出文本. 然后,我编写一个新的pdf文档,并将列表中的这些字符串写入包含单元格的表中. 我提出了两个主要问题. 我想在表中有三列,但是如 ...
- java jini dll_java - Jini / JavaSpaces发现错误 - 堆栈内存溢出
我在Eclipse中编写了这些类,并启动了Launch-All脚本和Run示例. 有用. 之后,我将这些类导出到可执行的jar(JavaSpaceClient.jar)中,并使用以下命令尝试了该jar ...
- java解析odt_java - 使用Java从odt文件读取XForm - 堆栈内存溢出
我设法通过jdom(odfdom-java)做到了这一点,毕竟一点都没有使用过. 绑定的xml本身存在于表示odt的xml中. 您只需要知道表单的ID或标签的名称,即可获得正确的节点. 之后,将构造一 ...
最新文章
- 一些常用的图像数据库总结
- LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】
- 「刷新 CTO」微软与 CSDN 的 CTO 转型思想汇
- 想多了!亚马逊中国没有离开 | 畅言
- 《linux核心应用命令速查》连载八:kill:杀掉进程
- UNIX环境高级编程之第6章:系统数据文件和信息
- 基于M.2接口的SATA3协议和PCIE协议的SSD接口定义
- Linux消息队列的设置及查看
- 红绿3d眼镜与红蓝3d眼镜区别_3D眼镜是指什么原理?
- 手把手教你集成Andriod百度地图SDK
- angr源码分析——数据依赖图 DDG
- 小码哥php教程,小码哥Java从0到高级工程师
- 《算法笔记》胡凡——4.2散列
- python打印七段数码管引脚图_前辈学51单片机的感悟是怎么样的?说说看
- 为什么电磁炉加热一会就停了 电磁炉加热原理与维修技巧一点通_电磁炉电路图讲解
- Odoo产品分析 (三) -- 人力资源板块(7) -- 费用追踪(1)
- 我的网安之路——2020年总结
- 中国“苹果皮”之父:希望与苹果公司展开合作
- 微信小程序开发 01
- 足球分析大小球开发成量化交易软件