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或标签的名称,即可获得正确的节点. 之后,将构造一 ...
最新文章
- ie9下console不兼容的问题
- ubuntu14.04环境下spyder的安装
- linux fedora设置开机自动挂载win磁盘
- 290. Word Pattern
- 再讲IQueryablelt;Tgt;,揭开表达式树的神秘面纱
- pat1032. Sharing (25)
- 一大早,分享一个好消息
- 计算机房选址,数据中心机房如何选址 数据中心机房如何日常维护
- 通过Web界面访问华为USG6000防火墙+安全策略
- java 大数四则运算_Java中的大数运算
- 人脸识别面试常见题目总结
- 常用激活函数--小白角度 TensorFlow 机器学习 神经网络 选取
- 基于thinkphp5的开源cms
- Cpu、核、Java Runtime.getRuntime().availableProcessors()
- TableView的使用方法
- PID算法在STM32上的实现
- 【英语总结】11月英语
- 饥荒联机版连不上服务器_饥荒本地联机|饥荒联机版无法连接到klei服务器怎么回事_234游戏网...
- jQuery五彩炫酷模拟键盘 带键盘敲击声音
- ryu--北向接口(流表的操作以及多控制器流表信息互通)
热门文章
- 计算机专业群名有内涵,微信群起名高端有内涵
- fc游戏模拟器PHP源码,FC模拟器合集 - 经典怀旧 - 虎纹猫家园☆2021 - Powered by Discuz!...
- MySQL——where字句常用的查询条件及用法
- Linux Tcp/ip UDP基本概念(6.8)
- 北京大学安全高效计算实验室(SEC Lab)李萌老师,招收科研实习生
- 2021-07-30 Java练习题
- (学习收藏)招标过程中如何讲标?
- MSP430Ware使用笔记 初始化DCO至8MHz
- Linux系统关闭笔记本触摸板的方法
- 14.Redis相关原理