b*********n 发帖数: 1258 | 1 一个file一共要重复读3遍
每一遍都如下操作:
BufferedReader in = new BufferedReader(new FileReader(file));
while (inLine=in.readLine()!=null){
................
}
in.close();
想问一下,为什么在我第二,三遍再读 的时候
为什么第一个 BufferedReader 的 memory 没有被 release 呢?
尽管我已经用了:in.close();
那位高手给指点一下吧! 谢谢! |
|
y****n 发帖数: 192 | 2 public static byte[] getRawByteDataFromFile(){
StringBuffer sb = new StringBuffer();
String s = null;
byte[] rawByteData = null;
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(rawDataFile));
while((s=in.readLine())!=null){
sb.append(s+"\n");
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTra |
|
c******n 发帖数: 4965 | 3 after connection,
the server side just spits out a short string , which I know is less than
100 chars long.
so supposedly I could just wait 1 second, and read from the stream
whatever is available.
but the problem is that the stream does not terminate by a "\n", so I
can't do
readline
read(byte[] , int, int) doesn't work either, since I don't know the actual
length of the string.
apparently I can use NIO for this, but is there a simpler method?
Thanks |
|
m****r 发帖数: 6639 | 4 这个可以读一次解决。
基本办法是,
count = 0;
result = null;
while (true) {
line = readLine();
if line == null {
break;
} else {
result = random(1,count) == 1? line : result;
}
}
result = random(1,count) == 1? line : result;
return result;
差不多就是这个意思。 我的code肯定有错, 倒是。 |
|
r*****l 发帖数: 2859 | 5 从哪读:键盘输入还是文件?
BufferedReader.readLine() 就是读一行呀? |
|
c*********e 发帖数: 16335 | 6 google一下,应该是filename.readline之类的。 |
|
p**r 发帖数: 5853 | 7 俺说下思路及考官意图,个人看法。
#1 绝对不一次性读入整个文件!!!!
这个是考你处理大文件的方法,
一次性读入,3行还行,如果3百万行,那就是坑爹
所以类似readline的方式,分行读入,但是不是只读1行!
【注意点】
读单项(不是单行!!!)的时候做一个判断,是否读到结尾了,因为不一定一行包括
了所有信息。
是否结尾标志,用regular expression判断,一旦读到第2个时间,结束,进入数据拆
分!
【可能会加分的,但是有点showoff,遇到考官装X的会起反效果。】
你可以在读文件前再做一个判断,文件小于类似10k,直接读文件,不然就分行读。
也就是说你知道如何处理大文件,但是对小文件也不扯淡。。
#2 必须用regular expression<正则>,要求#4里说得很清楚!!!!
正则表达式分离数据,必须学会,以后会用很多。
判断日期格式,有很多种表达式。
如果不懂,就先去研究一把,这个题目只是分离日期以及后面数据,算简单的。
#3 把数据分离成2部分就不说了,这个你肯定会。
#4 第5项要求的意思其实是为了cross platform等后期需要,
所以建议用xm... 阅读全帖 |
|
m***l 发帖数: 45 | 8 感谢前辈指点!!
还有几点不明想请教
1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不
是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真
的满足第一条要求
1.Must not load entire file in memory (stream)
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
br.close();
2。多行的时候是否需要保持多行的状态?有id建议:“建一个HashMap
ArrayList>,key是时间,array里放后面的就行了while(true)里每次读一行
从括号里解出时间字符串,扔到map里”
不知这个方法是否可行?是否繁琐了?就直接解析出来每行存到xml或者json就行了?
3。... 阅读全帖 |
|
p**r 发帖数: 5853 | 9 java语法,以及一些关键词,你最好问问java高手们。
俺java基本忘光了。。。
#1
题目要求是must not load ENTIRE file in memory
貌似有个bufferreader的可以,你设置个limition,怎么读不用担心load整个文件到
memory
#2
时间做key不行,因为就是你的example里面就有时间一模一样的,除非时间数据全部是
unique.
#3
输出成何种格式很难说,因为不知道你公司是什么类型的。
但是既然开始要求你不load entire file,就意味着file size很大
如果你再把所有东西写入结构,再导出另一个log,其实就失去意义了。
#4
最后回答兼职问题,这东西如果是熟练码工的话,应该15分钟内搞定。
1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不
是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真
的满足第一条要求
1.Must not load entire file in memory (stre... 阅读全帖 |
|
b***i 发帖数: 3043 | 10 BufferedReader reader = new BufferedReader( new InputStreamReader( System.in
, "UTF-8" ) );
String line = reader.readLine();
System.out.println(line);
运行输入
我
结果是乱码,怎么办? |
|
g*****g 发帖数: 34805 | 11 because you shouldn't readLine() for what you want to do, you should read
the entire file as a string. |
|
t***a 发帖数: 416 | 12 readline是只读一行,每行后面的\n被它吃掉了,不在结果中了 |
|
|
o********g 发帖数: 14 | 14 已读入html文件,现用正则表达式截取里的内容。如果 里只有一段内容(一
组 ),则可以成功截取。但若 里有大于等于2段内容时,则这一整块
内的内容无法截取。有谁知道怎么搞定这个问题吗?求给点意见
以下是Java的代码:
public static void main(String[] args) throws IOException {
File source_file = new File("./data/page source.txt");
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(source_file);
br = new BufferedReader(fr);
} catch (FileNotFoundException e2) {
e2.printStackTrace()... 阅读全帖 |
|
n******7 发帖数: 12463 | 15 最近看java,看了快200页还没扯到String,烦了
因为我的工作设计很多文件parsing的事情,就直接开写来学习
结果卡在map上了,求给个示范
经常要处理文件,比如input.txt:
Group,Sample,Gene,Variance
Patient,1,A,V22E
Patient,1,A,D54N
Patient,1,B,K17R
Control,2,C,A97G
Patient,3,A,V22E
Patient,3,C,I31V
Patient,3,D,G85A
Control,4,C,A97G
用python处理是这样的:
data = {}
with open('input.txt') as f:
f.next() #skip the title line
for line in f:
(group,sample,gene,variance) = line.rstrip().split(',')
if group not in data:
data[group] = {}
i... 阅读全帖 |
|
g*****g 发帖数: 34805 | 16 It's reading from a buffer, it will not block on waiting. |
|
b******y 发帖数: 9224 | 17 建议看jdk源码,能学不少东西。楼上说得对,内部实现了buffer缓存。其实和操作系
统的cache一个道理. |
|
|
E*V 发帖数: 17544 | 19 sudo emerge -av octave
Password:
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] media-libs/qhull-2003.1-r1 708 kB
[ebuild N ] sci-visualization/gnuplot-4.2.5-r1 USE="X readline -doc -
emacs -gd -ggi -latex -lua -pdf -plotutils (-svga) -wxwidgets -xemacs" 2,832
kB
[ebuild N ] sci-mathematics/glpk-4.39 USE="mysql -doc -examples -gmp -
odbc" 2,390 kB
[ebuild N ] app-admin/eselect-lapack-0.1 0 kB
[ebuild N ] app-admin/esel |
|
E*V 发帖数: 17544 | 20 不用,不过因我们要用汉字
USE要相应设一下
mine:
USE="X acl alsa amd64 avahi bzip2 cdr cjk cli consolekit cracklib crypt cups
dbus dri dvd fortran gdbm gnome gpm gtk hal iconv isdnlog java kde kpathsea
mdnsresponder-compat mmx mng mudflap multilib mysql ncurses nls nptl
nptlonly nsplugin opengl openmp pam pcre perl pppd python qt3 qt3support qt4
readline reflection session sockets socks5 spl sql sse sse2 ssl svg sysfs
tcpd unicode webkit xorg zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="
adpcm alaw asym copy dmix |
|
i*****f 发帖数: 578 | 21 The following python code should do:
#!/usr/bin/env python
m = 200
for i in range(1, m+1):
b1 = open("file%d"%i).readlines()
b2 = []
for line in b1:
n = int(line.split()[1])
b2.append("step %d" % n+i*100)
open("file%d_new"%i, "w").writelines(b2)
Ugly, but should work. I don't test it though. This can also be done by sed+
sh or awk, but I'm not familiar with the latter.
字n |
|
E*V 发帖数: 17544 | 22 好像是readline的问题,我具体忘了,要么是不是这么用的,
要不就是你参数不对。google一下应该有答案 |
|
xt 发帖数: 17532 | 23 注意,是readlink,不是readline.google没有答案 |
|
|
S*A 发帖数: 7142 | 25 不是的,参考以前那个连接到 readline 的 Lisp 的先例。
dynamic/static 对 GPL 没有区别。对 LGPL 有区别。
常见试图绕过 GPL 的一个技俩就是搞个包装接口然后用
dynamic loading。这个是不成的。 |
|
n******7 发帖数: 12463 | 26 server上装的是centos 5, 我的台机是ubuntu 10.04
一直忍受server的python2.4,前几天要用一个包,需要python2.6+,于是装了2.6,结
果安装numpy和scipy出问题了,跟LAPACK有关的。google了一圈,也没解决,只是看到
很多人建议不要自己试图折腾LAPACK和BLAS,很麻烦。 readline也有问题,只好继续
用2.4。ubuntu自带2.6,所以没问题。我记得当时server的2.4安装numpy也有问题,忘
记怎么折腾之后搞定的。
今天安装另一个东西,需要perl Moose module。结果server上cpan安装就是不对,ubuntu
一次
搞定。
很早之前,为了安装一个软件,不得不把server上过旧的一个lib给update了,结果不
小心让ssh都挂了,最后通过特殊通道重启了才ok
实在受不了了,准备跟老板建议适当的时候重装server。问题是老板完全不懂(最近的
笑话是把lock当作log out,跟我抱怨每次电脑backup后都log out。然后发现windows
做的是增量备份,大赞super ... 阅读全帖 |
|
S*A 发帖数: 7142 | 27 最近很倒霉,捣腾 Openwrt 的时候砖头了。
safemode 都回不来。
只好打开路由焊接了个 3.3v 串口,用串口连进去。
好在系统其实还是能用的。直接 wget 刷了个
更新的版本。幸好不需要 boot loader tftp。
在 Linux 下面用串口老是忘记什么参数去设置
波特率, 8N1 等等。程序倒是很多,minicom
screen 等等。
找了一下终于找到个图形界面的,不需要用命令
行设置参族。那就是 moserial。
而且程序把发送和接受分开两个区域部分显示,
当然自己打的部分也在接受里回显示。这个
很赞,如果要下载整个log 也很方便。这样就有点
readline 的感觉,要反复用以前法的命令很方便。
感觉就是给串口调式用的,很给力。 |
|
n******7 发帖数: 12463 | 28 妈的,用了几个console emulator
bash history都不work
readline倒是好的,ipython里面可以用
换成linux terminal了
这下真爽了 |
|
O*t 发帖数: 56 | 29 现在WSL bash最好的terminal解决方案是啥了
这个ipython是怎么跟bash.exe接起来的?
: 妈的,用了几个console emulator
: bash history都不work
: readline倒是好的,ipython里面可以用
: 换成linux terminal了
: 这下真爽了
|
|
m*******n 发帖数: 103 | 30 我也正在写一个TCP程序。
你是怎么知道一个函数需要哪个lib的。例如,socket 使用 socket lib.但是,writen
,readline 使用的是什么lib
本人仍然没有链接成功。:-(
just |
|
l*l 发帖数: 26 | 31 man socket
man writen
man readline |
|
k*k 发帖数: 508 | 32 没听懂你在说什么,你到底是要关还是开 output 窗口?
Win32 Console 的程序直接用 Console.WriteLine() 输出结果
最后面加个 Console.ReadLine(),输出结果以后会等待你回车
就什么都看到了。
Windows Form 的直接弄个 textbox 或者 label 啥的,看的还
不清楚? |
|
t****t 发帖数: 6806 | 33 how does it fail? this piece of code runs well on my system.
one thing you may want to know, if you put (the reference of) a filehandle
in an element of array, you may not use <...> to read a line from it. in
other word, or <$FH> works, but anything other than bareword or simple
scalar variable is interpreted as fileglob. if you have to use an array of (
the references of) filehandles, use readline(...) instead of <...>.
look
failed. |
|
g*****g 发帖数: 34805 | 34 UTF
You can do something like
long stopTime = System.currentTimeMills() + 2000;
while((line=in.readLine())!=null && System.currentTimeMills() <=
stopTime) |
|
d*******8 发帖数: 3182 | 35 Python
file = open(filename, 'r')
allLines = file.readlines()
file.close()
for eachLine in allLines:
if 'fill order' in eachLine:
print eachline |
|
g*****g 发帖数: 34805 | 36 Something like
while((str=bufferedReader.readLine())!=null) {
arrList.add(str);
}
I don't think long line matters. |
|
m******t 发帖数: 2416 | 37
That's some funny logic though. Why do we switch to 64-bit?
It can't handle 31498 trillion gazillion google bungle number
of bytes anyway. 8-)
It doesn't have to be real huge files. And yes, it does help
performance.
Trust me, I would know. I wrote a log parsing program (in java)
a little while ago that does exactly this - build an index of
fseek positions for every 100 lines. On a 200MB files,
the difference between readLine() and a memory mapped buffer
was beyond visible. |
|
w****i 发帖数: 964 | 38 if u have enough memory, use readlines() to read all the data and then use
list comprehension to convert to whatever you need.
Or you can save the data in Pickles and use cPickle.load. (but i doubt this
will be faster than the first way.) |
|
r*********r 发帖数: 3195 | 39 不需要 IDE, bash 下运行lisp解释器就会提示( ) 配对, 当然还要装 readline 库. |
|
b***y 发帖数: 2799 | 40 ☆─────────────────────────────────────☆
fishdaddy (无) 于 (Mon Mar 24 19:29:32 2008) 提到:
发信人: fishdaddy (无), 信区: Java
标 题: JAVA文本文件读写问题
发信站: BBS 未名空间站 (Mon Mar 24 19:29:04 2008)
如果一个文件是这样
AS BD CA 1.1
DS FD EA 3.4
(下略)
每行中间是tab分开的; 怎么样一个一个读出每个String和double ?
C++里面直接用《就可以了,java我只找到一个readline()
有什么简单的method,比如readDouble, readInt, readString这类的么?
☆─────────────────────────────────────☆
goodbug (好虫) 于 (Mon Mar 24 19:30:19 2008) 提到:
check Scanner class.
☆────────────────── |
|
D**C 发帖数: 6754 | 41 用 GZipInputStream 去读一个gz文件(200MB),但是结果却不完整(500MB)
实际界压缩应该是(1.4GB)
听说Java built in Zip implementation本来就有毛病,不知道大家有没有其他方法,
比如其3rd party code。
code snap:
FileInputStream inputStream = new FileInputStream(file);
GZIPInputStream gz = new GZIPInputStream(inputStream);
BufferedReader br = new BufferedReader(new InputStreamReader(gz));
String line = "";
while((line=br.readLine())!=null){
//do stuff
} |
|
t****t 发帖数: 6806 | 42 有个库叫readline
command
history里查 |
|
b*********n 发帖数: 1258 | 43 【 以下文字转载自 Java 讨论区 】
发信人: babyfacenan (黑土), 信区: Java
标 题: 请问个BufferedReader 读 file 的问题
发信站: BBS 未名空间站 (Thu Jun 25 19:54:04 2009, 美东)
一个file一共要重复读3遍
每一遍都如下操作:
BufferedReader in = new BufferedReader(new FileReader(file));
while (inLine=in.readLine()!=null){
................
}
in.close();
想问一下,为什么在我第二,三遍再读 的时候
为什么第一个 BufferedReader 的 memory 没有被 release 呢?
尽管我已经用了:in.close();
那位高手给指点一下吧! 谢谢! |
|
l***e 发帖数: 480 | 44 Goodbug的方法,感觉有点费劲:
BufferedReader r = new BufferedReader(new FileReader("file"));
String line;
while((line = r.readLine())!=null) {
String[] values = line.split("\t");
aaaobject.str1=values[0];
aaaobject.str2=values[1];
aaaobject.i=Integer.parse(value[2]);
aaaobject.j=Integaer.parse(value[3]);
}
可能我理解得有点费劲。 |
|
|
s*******e 发帖数: 664 | 46 ☆─────────────────────────────────────☆
lqlee (Lee) 于 (Fri Aug 14 10:12:12 2009, 美东) 提到:
请教C/C++/JAVA输入问题
一个文件有很多行。
每行是一个记录
每个记录有四项,前两个是字符串,后两个是整数,每项有'\t'隔开。
想比较三种输入方式,哪种最简洁。
希望,最好能把代码给出来。
多谢
☆─────────────────────────────────────☆
goodbug (好虫) 于 (Fri Aug 14 10:33:31 2009, 美东) 提到:
这当然是java简洁了。
BufferedReader r = new BufferedReader(new FileReader("file"));
String line;
while((line = r.readLine())!=null) {
String[] values = line.split("\t");
//process values.
}
☆────────────── |
|
g*****g 发帖数: 34805 | 47 It's a little verbose but one liner in java too.
BufferedReader r = new BufferedReader(new InputStreamReader(GZIPInputStream(
new FileInputStream("foo.gz"))));
String s;
while((s=r.readLine())!=null) ...
r.close(); |
|
r*******n 发帖数: 3020 | 48 输出所以以数值开头的行到新文件
没有测试。
如果文件不大
# Read data
f = open('your file', 'r')
lines = f.readlines()
f.close()
result = []
for each_line in lines:
item1, item2 = each_line.split()
if item1.isdigit(): # Assume in item1 there is
no dot
result.append(each_line)
# Write data
f = open('your new file', 'w')
f.write(''.join(result))
f.close() |
|
N***m 发帖数: 4460 | 49 how about java?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class Main {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// I use this url to test;
// not sure in your case since it is access restricted.
URL url = new ... 阅读全帖 |
|
l********a 发帖数: 1154 | 50 直接上次的当函数就行了,
#! /usr/bin/env python
def getAcronym(s):
return ''.join([x for x in s.title() if x.isupper()])
# main entry
fnin = raw_input('Please specify the input filename:\n')
fnout = raw_input('Please specify the output filename:\n')
sout = ''
if len(fnin.strip())>0 and len(fnout.strip())>0:
fin = open(fnin,'r')
for sline in fin.readlines():
sout += getAcronym(sline)+'\n'
fin.close()
fout = open(fnout,'w')
fout.write(sout)
fout.close()
print 'Done'
els... 阅读全帖 |
|