File outputFile2 = new File("money2.txt");
BufferedWriter outData2 = new BufferedWriter(new FileWriter(outputFile2));
for(int i = 0 ; i < 4 ; i++)
{
System.out.println(ts[i].getMoney());
outData2.write("TESTING");
outData2.write(ts[i].getMoney());
outData2.newLine();
}
outData2.close();
Run Code Online (Sandbox Code Playgroud)
这是我的代码.在我的控制台中我得到了
20000
10000
10000
4000
Run Code Online (Sandbox Code Playgroud)
这正是我想要的文件.但相反,我得到了这个money2.txt:
TESTING?
TESTING?
TESTING?
TESTING?
Run Code Online (Sandbox Code Playgroud)
(测试用于调试目的)
我无法弄清楚如何调试它.我的文件被正确写入(因为'TESTING'正在打印.我的数组正在被正确读取(因为输出到控制台是正确的).
出了什么问题?
我正在进行一项研究,调查一些JVM以及它的内存使用情况.我不明白的是,JVM在空闲时填充它的内存是什么,只是在几乎达到堆时释放它?为什么不只有一个用过的内存扁平线?顺便说一句,这个java应用程序托管在glassfish上,但是当我有一个简单的'hello world'swing应用程序时,我有相同的图表.所以GlassFish不必对它做任何事情.

提前致谢!
我有一个关于我需要用Java做的学校作业的问题.我需要从文件加载数据并检查这些文件中的错误.
我用一个bufferedReader完美的文件读取文件,直到文件结束:如果该行为空,它将忽略最后一行.
我知道如何检查空行,但最后一行根本没有使用readLine()函数给出任何结果bufferedReader.
重要的是,我知道最后一行是否为空,因为它必须是空的.如果空行不存在,则应该给出错误.
长话短说,我需要一种方法来区分以下情况(CRLF线的末尾):
情况1(正确):
line x CRLF
line y CRLF
Run Code Online (Sandbox Code Playgroud)
情况2(错误):
line x CRLF
line y
Run Code Online (Sandbox Code Playgroud)
这两种情况都会readline()在y行后返回null .
我在路上计算文件的行数,所以如果我有一个行计数器(注意:该计数器也必须计算该空行,我找到的所有行都不计算它们)
这些文件也包含空行,如果这对我需要的代码有任何影响(这些行被正确检测,因为它们应该是因为它们EOF不在这些行上)
请注意,程序使用或不使用最后一行,纯粹是赋值告诉我如果它不存在则给出错误.
改变ArrayList<String[]>到String[][]/Object[][]桌面的最简单方法是什么?
我尝试使用size()方法,但这种类型的列表没有简单的方法get().
感谢帮助.
_rowTable[j][0] = new String[_listSelect.size()][columnCount];
for(int j=0; j < _listSelect.size(); j++)
// for(int k=0; k < columnCount; k++)
_rowTable[j][0] = _listSelect.get(0);
Run Code Online (Sandbox Code Playgroud)
如何正确使用第二个循环?
我在java中读取文件时遇到一些问题:我的文件是例如:
3,4
2
6
4
1
7
3
8
9
Run Code Online (Sandbox Code Playgroud)
第一行3和4是数组A和B的长度,然后是每个数组的元素.我做的
import java.io.*;
import java.util.Arrays;
public class Progetto {
public static void main(String args[])
{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("prova.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine = br.readLine(); // step 1
if (strLine != null) {
String[] delims = strLine.split(","); // step 2
// step 3
int[] a = new int[Integer.parseInt(delims[0])];
int[] b = new int[Integer.parseInt(delims[1])]; …Run Code Online (Sandbox Code Playgroud) 假设我编写了一个程序,它创建了很多String对象和intern()它们:
String someString = param1 + param2;
someString.intern();
Run Code Online (Sandbox Code Playgroud)
这对于一小组字符串来说很好,但是如果我尝试创建十亿个字符串String呢?(或者说亿亿亿?)据我所知,JVM 在PermGen区域为s 维护一个常量池,而PermGen没有得到GC -ed.String
因此,如果我String在循环中创建了过多的对象,但是我删除了对它们的引用,那么它们将得到GC -ed(我将用尽PermGen空间)吗?这些String都是独一无二的,没有任何重复.
我有以下课程.
class MyObject implements Serializable {
private String key;
private String val;
private int num;
MyObject(String a, String b, int c) {
this.key = a;
this.val = b;
this.num = c;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一个对象列表,重复调用以下方法(比如10K或更多)
public void addToIndex(String a, String b, int c) {
MyObject ob = new MyObject(a,b,c);
list.add(ob); // List<MyObject>
}
Run Code Online (Sandbox Code Playgroud)
我使用分析器来查看内存占用,并且由于每次创建对象而增加了很多.有没有更好的方法呢?我正在将列表写入磁盘.
编辑:一旦列表完全填充,这就是我写的方式.一旦内存超出值(列表大小),是否有一种方法可以追加.
ObjectOutputStream oos = new ObjectOutputStream(
new DeflaterOutputStream(new FileOutputStream(
list)));
oos.writeObject(list);
oos.close();
Run Code Online (Sandbox Code Playgroud) 我正在阅读帖子,它说使用BufferedReader或MappedByteBuffer.我决定用291.0 MB文件自己测试,但仍然无法决定
BufferedReader reader = new BufferedReader(new FileReader("/Users/rachana/part-00000"));
String line = null;
while((line = reader.readLine())!=null) {
System.out.println(line);
}
~~~~~~ Heap utilization in MB ~~~~~~
Start Date 21:10:20
End Date 21:17:48
Time used 448 second
7.50 min
Used Memory In MB:28
Free Memory:81
Total Memory:109
Max Memory:1820
Run Code Online (Sandbox Code Playgroud)
使用MappedByteBuffer
RandomAccessFile aFile = new RandomAccessFile
("/Users/rachana/part-00000", "r");
FileChannel inChannel = aFile.getChannel();
MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
buffer.load();
for (int i = 0; i < buffer.limit(); i++)
{
System.out.print((char) buffer.get());
}
buffer.clear(); // …Run Code Online (Sandbox Code Playgroud) 首先为这个问题道歉 - 我是Java的新手,只是想不出一个好的方法来表达它.
我有一个名为"动物",有的叫"猪"特定的类抽象类,"马"等,从"动物"继承.
我使用一个ArrayList创建动物名单,这被实例化猪,马等.然后我想拉断的动物名单,并与他们合作,但那么Java将只允许我与他们进行互动,如果他们是基类,动物.
这是我的主要代码的快速列表,应该使这更清楚:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(new Pig("Porkey", "pink"));
Animal animal = animals.get(0);
animal.introAnimal(animal);
animal.oink(); // Won't compile.Specific Pig class method
}
}
Run Code Online (Sandbox Code Playgroud)
现在我知道我可以用" Pig animal = (Pig) animals.get(0)" 进行投射但是我的观点是我希望能够与这些动物一起工作而不管它们是什么,如果我需要知道的话,可以使用getObjectType或稍后的一些.
看起来好像这是多态性的障碍:)我不是太担心这个特定的代码(我只是在练习),但更多的是在这个问题的一般解决方案.
非常感谢.
运行代码后如
public static void main(String... args) throws Exception {
getUnsafe().getByte(0);
}
private static Unsafe getUnsafe() throws NoSuchFieldException, IllegalAccessException {
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
return (Unsafe) theUnsafe.get(null);
}
Run Code Online (Sandbox Code Playgroud)
这会导致JVM崩溃,然后查看记录的输出,在Internal exceptions部分下显示一些奇怪的路径:
thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u60\4407\hotspot\srÚÞ ©Ö_®?
thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u60\4407\hotspot\src\share\vm\prims\j
Run Code Online (Sandbox Code Playgroud)
我绝对没有在我的本地机器上使用这些路径,并且一些谷歌搜索显示它们经常在这些故障转储中结束.我假设它们来自最初编译JDK的时候.
我的问题是 - 这是正确的吗?为什么这些信息会被整合到JDK中?纯粹是为了稍后调试?