发帖数: 1 | 1 读4
这道题给了我们一个Read4函数,每次可以从一个文件中最多读出4个字符,如果文件中
的字符不足4个字符时,返回准确的当前剩余的字符数。现在让我们实现一个最多能读
取n个字符的函数
int read(char *buf, int n) {
int res = 0;
for (int i = 0; i <= n / 4; ++i) {
int cur = read4(buf + res);
if (cur == 0) break;
res += cur;
}
return min(res, n);
}
读4 II Read N Characters Given Read4的拓展,那道题说read函数只能调用一次,而
这道题说read函数可以调用多次
int read(char *buf, int n) {
for (int i = 0; i < n; ++i) {
if (readPos == writ... 阅读全帖 |
|
c***d 发帖数: 26 | 2 前几天看这里讨论说用read4/read4k实现readAny边界条件比较多容易出错, 今天写了
一下,发现没什么边界条件啊。大牛看看哪里可能出问题。
用javascript写的,不过基本语法和c/java没啥区别。就这两行可能比较拗口:
var args = [bytes, 0].concat(store.splice(0, numToCopy));
[].splice.apply(buf, args);
它做的无非就是从store数组里刨去前numToCopy个元素,再把他们append到buf数组。
readAny函数在这里。完整的带unit test和mock read4()的code在 https://gist.
github.com/dumpty/7176257。可以用node执行,或者直接考到chrome dev console里
运行。
var readAny = (function() {
var store = [];
return function(n, buf) {
... 阅读全帖 |
|
y*****e 发帖数: 712 | 3 题意我有点迷糊,不明白为啥public int read(char[] buf, int n)给出说buf是
destination buffer,
但看了答案之后半懂不懂的写了一个c++的,通过了,是这样的
int read(char *buf, int n) {
bool eof=false;
int readBytes=0;
while(!eof && readBytes<=n)
{
int sz=read4(buf);
if(sz<4) eof=true;
int bytes = min(n - readBytes, sz);
readBytes+=bytes;
buf+=bytes;
}
return readBytes;
}
大概的思路就是每次用read4从buf里读,然后指针往后挪,一直挪到eof或者n reached
,这里的buf应该和... 阅读全帖 |
|
r*******e 发帖数: 971 | 4 C++ 不熟,没注意到这么强悍的写法。
Java的解法实际上是个BufferedReader,通过调用read4 每次读取一定量数据,扔到一
块缓冲区,然后reader自己被调用时,如果缓冲区中数据足够了,就直接拷贝,否则继
续调用read4
所以java解法中的char array 其实就是个缓冲区,如此而已。
比较流行的形式是read4k,为何是4k的原因跟硬盘的存储格式有关,4k似乎正好是一个
簇,每次读硬盘至少要读一个簇。 |
|
b*****g 发帖数: 46 | 5 举几个例子你就明白了。
Read4:
Buf=“abcdefg”
每个test case只会调用你写的函数一次,比如
read(3), 返回“abc”,这个case 就结束了
read(3), 还是返回“abc”
Read4 II
每个test case可能会调用你写的函数多次
同样的buf
read(3), 返回”abc”,再read(3), 这次要返回“def” |
|
r*******e 发帖数: 971 | 6 我怎么感觉你这个解法有问题。
int sz = read4(buf);
这行跑完了,如果buf不变,那么以后每次写字符都是在前4个字符上重复操作。 |
|
r*******e 发帖数: 971 | 7 buffer是缓冲,调用read4的时候往buffer里面写
read的时候,用arraycopy 从buffer往buf里面写。 |
|
f********c 发帖数: 147 | 8 应该buf是destination. buffer是缓冲,暂时存储从read4读取的数据,然后System.
arraycopy那一行是把buffer里面的数据copy到buf里面。 |
|
|
A*******e 发帖数: 2419 | 10 不停从source读,向target写。直到source里剩下不到4个,或者target里剩下不到4个
为止。然后判断是没读的少,还是没写的少,取最小值再读写一下。
class Solution {
public:
int read(char* buf, int n) {
int total_bytes = 0;
int bytes = 0;
char tmp[4];
while ((bytes = read4(tmp) == 4 && total_bytes <= n - 4) {
memcpy(buf, tmp, bytes);
total_bytes += bytes;
buf += bytes;
}
int remain_bytes = min(bytes, n - total_bytes);
memcpy(buf, tmp, remain_bytes);
return t... 阅读全帖 |
|
d*k 发帖数: 207 | 11 I really hate to be the one pointing it out.
For one thing your condition in the while clause is obviously wrong. You'll
overflow str until read4() is exhausted. For another, consider the case when
read4 is exhausted and returned 2. Suppose your code did return right
answer for the current call. Then curPos will be 2. In the next call you'll
first move the last two bytes in buffer to str, these two bytes are not what
you believe they are.
I'm sure there are other cases that your code can't pass.... 阅读全帖 |
|
s********u 发帖数: 1109 | 12 写了一下感觉真的挺难,要考虑的太多了,比如以前剩下的渣渣,size到顶了也要
return,或者read4()进来如果返回值不为4是不是意味着后面就没数据了?那么size
还没到就要return。
写了一下,应该还能优化:
int Read4(char *buffer);
int Read(char *str, int max_size){
static int curPos = 0;
static char *buffer = new char[4];
int size = 0;
int readSize = 0;
int saveSize = 0;
if( curPos != 0){
readSize = 4 - curPos;
saveSize = min( readSize, max_size - size );
memcpy( str + size, buffer, saveSize );
size += saveSize;
}
... 阅读全帖 |
|
w*****r 发帖数: 42 | 13 Read N Characters Given Read4 II - Call multiple times
The API: int read4(char *buf) reads 4 characters at a time from a file.
The return value is the actual number of characters read. For example, it
returns 3 if there is only 3 characters left in the file.
By using the read4 API, implement the function int read(char *buf, int n)
that reads n characters from the file.
Note:
The read function may be called multiple times.
有人做了吗?第一次读多了以后怎么把文件指针退回去? 还是有别的办法?我用原来
那个读一次的代码试了一下,过不了下面这个testcase.
Input... 阅读全帖 |
|
k******4 发帖数: 7 | 14 为了防止违反NDA,就不列出公司名了,就是一些常见公司。
1. Write a iterator to iterate a nested array.
For example, for given array: [1, 2, [3, [4, 5], [6, 7], 8], 9, 10]
call iterator.next() 10 times should return 1,2,3,4,5,6,7,8,9,10.
用了stack存(array, index)的tuple。
2. LeetCode 原题,120 - Triange。有一点变种,给的是一维数组。
3. Implement HashTable 主要看dynamic expanding
4. Implement MaxHeap.
5. Topology sort,就是版上常见的给一些排过序的未知语言的词,求该语言的字母序
。要求实现核心算法。可以给出一些helper function定义不需实现。
6. LeetCode 付费题 157 & 158 - Read N Characters Given Rea... 阅读全帖 |
|
o**********e 发帖数: 18403 | 15 【 以下文字转载自 SanFrancisco 讨论区 】
发信人: onetiemyshoe (onetiemyshoe), 信区: SanFrancisco
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版 (转载)
发信站: BBS 未名空间站 (Wed Nov 19 21:05:36 2014, 美东)
发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版
发信站: BBS 未名空间站 (Tue Nov 18 20:46:44 2014, 美东)
考了下古,发现这位哥们的转贴,基本可以确认是一个人,基本可以确定这个是我被拒
的原因
同样迟到了大概5分钟,闲扯了十分钟左右,然后read4,确实很简单,但是给的题目非
常不清楚,所以完全没有考虑buffer里面留下的部分,中间我问了除了输出int,需不需
要考虑读出的字符放在哪里,被他含混过去了。自己没做过底层的东西,竟然也没有看
到这个帖子,细节基本一致,因为题目很简单,所以35分钟内... 阅读全帖 |
|
w****n 发帖数: 25644 | 16 【 以下文字转载自 Dreamer 讨论区 】
发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版
发信站: BBS 未名空间站 (Tue Nov 18 20:46:44 2014, 美东)
考了下古,发现这位哥们的转贴,基本可以确认是一个人,基本可以确定这个是我被拒
的原因
同样迟到了大概5分钟,闲扯了十分钟左右,然后read4,确实很简单,但是给的题目非
常不清楚,所以完全没有考虑buffer里面留下的部分,中间我问了除了输出int,需不需
要考虑读出的字符放在哪里,被他含混过去了。自己没做过底层的东西,竟然也没有看
到这个帖子,细节基本一致,因为题目很简单,所以35分钟内完成,全程毫无任何提示
,所有问他的问题基本上都回答得非常模糊,非常有误导性。之后让问fb问题,自己回
答了六周的ramp 什么着,我明明没问。。。最后拍照
我比下面这位哥们唯一好点的地方,我记下了这个人的名字的大致发音,自己查了下
linkedin, 应该是R--it---u---raj Kir---... 阅读全帖 |
|
w***5 发帖数: 20 | 17 我说两个办法:
1. 就是你的这个,不断的读read4. read4太有迷惑性了,还不如是 read4K呢
2. 我说开一个大的buffer,不断的填充buffer, 不够的时候再去读, 每次先从buffer里
面读
我问他写第一种情况ok? 他说好的. 结果最后过case的时候,来了一个 read(2), read
(5) 那不是傻眼了吗, 肯定得在buffer里面存着
然后就想改成2的情况, 一紧张, 就没法写好了. |
|
d*k 发帖数: 207 | 18 看了大家的討論,優化下內存拷貝次數
int Read(int size, char* buffer) {
int n = size / 4;
int ret = 0;
for (int i = 0; i < n; ++i) {
int t = Read4(buffer + ret);
ret += t;
if (t < 4) {
return ret;
}
}
int left = size % 4;
char buf[4];
int sz = min(left, Read4(buf));
memcpy(buffer + ret, sz);
ret += sz;
return ret;
} |
|
r*******n 发帖数: 3020 | 19 char* buffer= (char*)malloc(size);
void read(int size,char*buffer){
int times=size/4;
int rem = size%4;
int k=0;
char buffer4[4];
for(int i=0; i
read4(buffer);
memcpy(buffer+k, buffer4, 4);
k+=4;
}
read4(buffer);
memcpy(buffer+k, buffer4, rem);
} |
|
d*k 发帖数: 207 | 20 這種需求第一次寫的時候如果沒說,之後他指出,你再加上也算可以吧?要是要求一次
就寫出來有點成心黑你啊。
改一下我的,我覺得還比較好改啊。
int Read(int size, char* buffer) {
static char extra[4];
static extra_len = 0;
int ret = 0;
if (extra_len > 0) {
int t = min(extra_len, size);
memcpy(buffer, extra, t);
ret += t;
extra_len -= t;
size -= t;
}
int n = size / 4;
for (int i = 0; i < n; ++i) {
int t = Read4(buffer + ret);
ret += t;
if (t < 4) {
return ret;
... 阅读全帖 |
|
d*k 发帖数: 207 | 21 一直關注這帖子,我幫你review一下啊。
直改了邏輯錯誤,都在註釋裡。因為你的實現有bug,可能更改方式不只一種。我只在
註釋裡寫了一種我認為正確的改法。
===============================================
int Read4(char *buffer);
int Read(char *str, int max_size){
static int curPos = 0;
static char *buffer = new char[4];
int size = 0;
int readSize = 0;
int saveSize = 0;
/*
下面這個if裡是錯的,比如你沒有更新max_size,而且memcpy不能從頭開始
copy buffer等等。另外,過於繁瑣。按照你的變量設計,好一點的寫法是
if (curPos > 0) {
int readSize = 4 - curPos;
saveSize = ... 阅读全帖 |
|
s********u 发帖数: 1109 | 22 大致是这样,可能还是会有bug:
int Read4(char *buffer);
int Read(char *str, int max_size){
static int curPos = 0;
static char *buffer = new char[4];
int size = 0;
int readSize = 4;
int saveSize = 0;
bool left = (curPos != 0);
while( left || size < max_size || readSize == 4){
if(left){
readSize = 4 - curPos;
left = false;
}
else
readSize = Read4( buffer );
saveSize = min( readSize, max_s... 阅读全帖 |
|
o**********e 发帖数: 18403 | 23 【 以下文字转载自 SanFrancisco 讨论区 】
发信人: onetiemyshoe (onetiemyshoe), 信区: SanFrancisco
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版 (转载)
发信站: BBS 未名空间站 (Wed Nov 19 21:05:36 2014, 美东)
发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版
发信站: BBS 未名空间站 (Tue Nov 18 20:46:44 2014, 美东)
考了下古,发现这位哥们的转贴,基本可以确认是一个人,基本可以确定这个是我被拒
的原因
同样迟到了大概5分钟,闲扯了十分钟左右,然后read4,确实很简单,但是给的题目非
常不清楚,所以完全没有考虑buffer里面留下的部分,中间我问了除了输出int,需不需
要考虑读出的字符放在哪里,被他含混过去了。自己没做过底层的东西,竟然也没有看
到这个帖子,细节基本一致,因为题目很简单,所以35分钟内... 阅读全帖 |
|
s******7 发帖数: 1758 | 24 贴个java的
就是把read4多读出来的存起来, 下次先读这段剩余的,refactor了一下,看起来短点
,要是面试直接上多次引用,我第一次碰到半个小时肯定搞不定
private List left;
public int read(char[] buf, int n) {
if(left==null) left = new ArrayList();
int ptr = Math.min(n,left.size());
for(int i=0;i
left.subList(0,ptr).clear();
if(n
else{
while(ptr < n){
char[] b4 = new char[4];
int r = read4(b4);
... 阅读全帖 |
|
g****v 发帖数: 971 | 25 Read N Characters Given Read4 II - Call multiple times
测试的输出是:
Input: "ab", [read(0),read(1),read(2),read(1)]
Output: ["","a","b","b"]
Expected: ["","a","b",""]
我的思路很简单,就是把上次没读完的保留下来(并且是把没读完的字符移动到index
0). 下次读的时候先读上次剩下的。但不知道为什么不对?
class Solution {
int left = 0; //length of left chars of last time reading, staring from
0 of leftover.
char leftover[4];//left chars are stored here.
public:
/**
* @param buf Destination buffer
* @param n Maximum number of characters t... 阅读全帖 |
|
d*****c 发帖数: 605 | 26 从开始好好复习,到现在花了2个多月。现在停下来写一下感受。不废话,先上面经:
(PS: 不是fresh)
1. Apple
fibonacci
longest common subsequnce
external sort implementation
c++ smart pointer原理和implementation
design cache for retrieving previous query
design和implement一个game的AI,尽量能赢user,有一个词典,你和电脑,一人给填
一个单词必须是词典里的prefix。如果谁放入单词的ending char,谁就输了。关键是
implement很烦。ex:
dict{ "abc", "aa"}, 你先给a, 电脑给a他就输了,所以电脑要给b,然后再轮到你,
必须给c,然后你就输了。
总体来说,apple家偏经验,algorithm很少。由于没准备就去了,挂。。。
2. Amazon (AWS)
1电:
maximum sum from root to leaf (LC)
maximum sum in tree (... 阅读全帖 |
|
o*q 发帖数: 630 | 27 # Title Editorial Acceptance Difficulty Frequency
1
Two Sum 28.3% Easy
292
Nim Game 54.4% Easy
344
Reverse String 57.3% Easy
136
Single Number 52.2% Easy
2
Add Two Numbers 25.6% Medium
371
Sum of Two Integers 51.6% Easy
4
Median of Two Sorted Arrays
20.4% Hard
6
ZigZag Conversion 25.6% Easy
13
Roman to Integer 42.7% Easy
237
... 阅读全帖 |
|
发帖数: 1 | 28 534 Design TinyURL 0.0% Medium
283 Move Zeroes 50.7% Easy
301 Remove Invalid Parentheses 35.5% Hard
273 Integer to English Words 22.4% Hard
621 Task Scheduler 42.4% Medium
67 Add Binary 33.2% Easy
325 Maximum Size Subarray Sum Equals k 43.1% Medium
689 Maximum Sum of 3 Non-Overlapping Subarrays 41.2% Hard
253 Meeting Rooms II 39.3% Medium
17 Letter Combinations of a Phone Number 35... 阅读全帖 |
|
|
o**********e 发帖数: 18403 | 30 【 以下文字转载自 Dreamer 讨论区 】
发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版
发信站: BBS 未名空间站 (Tue Nov 18 20:46:44 2014, 美东)
考了下古,发现这位哥们的转贴,基本可以确认是一个人,基本可以确定这个是我被拒
的原因
同样迟到了大概5分钟,闲扯了十分钟左右,然后read4,确实很简单,但是给的题目非
常不清楚,所以完全没有考虑buffer里面留下的部分,中间我问了除了输出int,需不需
要考虑读出的字符放在哪里,被他含混过去了。自己没做过底层的东西,竟然也没有看
到这个帖子,细节基本一致,因为题目很简单,所以35分钟内完成,全程毫无任何提示
,所有问他的问题基本上都回答得非常模糊,非常有误导性。之后让问fb问题,自己回
答了六周的ramp 什么着,我明明没问。。。最后拍照
我比下面这位哥们唯一好点的地方,我记下了这个人的名字的大致发音,自己查了下
linkedin, 应该是R--it---u---raj Kir---... 阅读全帖 |
|
o**********e 发帖数: 18403 | 31 【 以下文字转载自 SanFrancisco 讨论区 】
发信人: onetiemyshoe (onetiemyshoe), 信区: SanFrancisco
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版 (转载)
发信站: BBS 未名空间站 (Wed Nov 19 21:05:36 2014, 美东)
发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
标 题: 面完fb,结果已经出来了,share下被拒的原因(请转jobhunting版
发信站: BBS 未名空间站 (Tue Nov 18 20:46:44 2014, 美东)
考了下古,发现这位哥们的转贴,基本可以确认是一个人,基本可以确定这个是我被拒
的原因
同样迟到了大概5分钟,闲扯了十分钟左右,然后read4,确实很简单,但是给的题目非
常不清楚,所以完全没有考虑buffer里面留下的部分,中间我问了除了输出int,需不需
要考虑读出的字符放在哪里,被他含混过去了。自己没做过底层的东西,竟然也没有看
到这个帖子,细节基本一致,因为题目很简单,所以35分钟内... 阅读全帖 |
|
w***5 发帖数: 20 | 32 上次onsite,4轮,自己感觉很好.
HR回信也说: went well so far but still need last code question interview to
end the process
要安排电话面试
结果我说:电面不好,我要求onsite,今天上午就onsite了.
结果, 一看是一个严肃的老印,基本听不懂其在说什么
就一道题:
实现 int Read(int Size, char * buffer) using int Read4(char * buffer)
这题思路很简单的,我当时给了2种方法结果在他的引导上走上了一条不归路,第一次实
现有bug, 没考虑buffer里面留下的部分....汗 ...各种改...(这题原来有过类似的
readLine, 但是自己觉得应该简单没有动手仔细写过, 结果在press下不能写好, 还是
实力不够!!!)
最后老印拍了照,明显要回去Negative的节奏
也许看到了老印,第一感觉就不妙吧,有了心理暗示, 过程中沟通也不是很顺畅. 面到40
分钟的时候,老印就不出题了, 直接叫问问题.汗
郁闷, 悔恨, 临门一脚... 阅读全帖 |
|
w***5 发帖数: 20 | 33 就是 Read4(char*buff),每次读取4个tytes.
然后利用这个函数实现 Read(int size, char *buffer). |
|
p********d 发帖数: 357 | 34 哪两种方法。我就看到把(size/4+1)次Read4再读最后一次size%4 byte的方法。还有什
么方法?如何被烙印误导的?
to |
|
w***5 发帖数: 20 | 35 其实我觉得本身的问题还是出在交流上边:
1. Read4太有迷惑性了,才读4types 也许是最小的单位了. 哪里想到调用 Read(int
size, char * buffer) 时候会有 read(2, buffer), read(1,buffer)这样的情况. 如
果直接上来说调用的function是 Read4K 那就一目了然了
2. 如果我这个地方不清楚,应该早点提出来得到确认, 而不是最后让他指出来, 自己就
慌了阵脚
感觉他就在后面盯着我出错的感觉, 有了错误还让继续往这个方向上走下去, 最后才来
告诉你你的思路有问题.
Anyway, 心有不甘而有毫无办法.
bless后面的人
to |
|
s********u 发帖数: 1109 | 36 我觉得第二种办法有点多此一举吧。我觉得这道题的本意就是说,4这个buff很小,然
后你要把这些很小的数据存到一个大的buffer里去,也就是read(size,char *buffer
)。比如read(4000,buffer)就相当于read4k(buffer)
额。。这个read(2)和read(5)也没想到,不过应该能想到剩下的东西,还应该在
4buff里呆着,下次read(size)的时候还要用。跟那个readline的题一样
“(size/4+1)次Read4再读最后一次size%4 byte的方法”这句话是普遍适用的,不过如
果当前4buff不为空,应该要先把上次剩下的渣渣读进来吧。
这个题感觉第一次碰到的话很难做好,有点刁难。
read |
|
d*k 发帖数: 207 | 37 沒關係,樓主繼續加油啊,我連面試機會都木有。
int Read(int size, char* buffer) {
char buf[4];
int ret = 0;
while (ret < size) {
int sz = Read4(buf);
if (sz == 0) {
break;
}
int cp_size = min(sz, size - ret);
memcpy(buffer + ret, buf, cp_size);
ret += cp_size;
}
return ret;
} |
|
s********u 发帖数: 1109 | 38 还是需要的。就是你read4()最后会有一个余量。就是4-size%4。这个应该存在
static char*buff里,而不是buffer里,因为buffer存到size之后就不存了。
如果一开始就考虑到这个的话,无论buffer大小多少,逻辑都是一样的,只不过size/4
是否为0而已。
read |
|
m**p 发帖数: 189 | 39 没啥, 这题挺偏的。这年头,不是做系统的,问这干吗。呀是找抽。
I renamed some vars in the code for easy understanding:
int Read(char *dest, int MAX_SIZE){
static int offset = 0;
static char *buffer = new char[4];
int size = 0, copySize = 0;
int readSize = 4;
while( offset != 0 || size < MAX_SIZE || readSize == 4){
readSize = offset ? 4 - offset : Read4(buffer);
copySize = min( readSize, max_size - size );
memcpy( dest + size, buffer + offset, copySize );
size += saveSiz... 阅读全帖 |
|
m*****k 发帖数: 731 | 40 int n = size / 4;
for (int i = 0; i < n; ++i) {
int t = Read4(buffer + ret);
ret += t;
//啥时候能t < 4啊?
if (t < 4) {
return ret;
}
} |
|
s********u 发帖数: 1109 | 41 老题了吧,不过老要写错,尤其是那个read4写read的更恶心。
#define MAX_LEN 4096
int read(char* buf, int len);
char *readLine(){
static bool EOF = false;
char *str = NULL;
int i, size = 0;
static int currentPos = MAX_LEN;
static char* buffer = new char[MAX_LEN];
while(!EOF || currentPos != MAX_LEN ){
// buffer is not empty, handle buffer first
if(currentPos != MAX_LEN){
for(i = currentPos; i < MAX_LEN; i++)
if( buffer[i] ==... 阅读全帖 |
|
c*******e 发帖数: 621 | 42 read4网上到处有啊 本来就不是它家原创
Binary Tree Upside Down 顾名思义 |
|
a******u 发帖数: 69 | 43 三轮
1. a) 给出加密的方法'a'->1, ……, 'z'->26. 给一个数,问有多少种解密的方法。
b) 给你n个用户和k,找出发帖数最多的k个用户。
2. a) 给你棵二叉树,节点上有权值,问从一个叶子走到另外一个叶子的路里面权值最
大的那条是什么。
b) 给你数组a1,a2,...,an。输出数组a2*a3*...*an, a1*a3*a4*...*an, ..., a1*
a2*...*an-1.
3. 问简历,问来想做什么工作。一道coding题:Read4k,leetcode上那道“Read N
Characters Given Read4”类似。
前两轮基本bug free.第三轮被抓出些bug。
第二天得知面挂,觉得有点不可思议。 |
|
s***c 发帖数: 639 | 44 试了能过你那个case
char buf4[4] = {0};
int b4left = 0;
char *pa = buf4;
int read(char *buf, int n){
if (n <= b4left){
memcpy(buf, pa, n);
b4left -= n;
pa += n;
buf += n;
return n;
}
else{
memcpy(buf, pa, b4left);
n -= b4left;
buf += b4left;
}
int npre = b4left;
b4left = 0;
pa = buf4;
char *ptr = buf;
int cnt = 0, nrd = 4;
while (cnt < n && nrd == 4){
nrd = read4(buf4);
if (cnt + nrd > n){
memcpy(ptr, buf4... 阅读全帖 |
|
m*****k 发帖数: 731 | 45 while(ptr < n){
char[] b4 = new char[4];
int r = read4(b4);
if(r==0) return ptr;
int min2 = Math.min(r,n-ptr);
for(int i=0;i
if(min2
}
请教一下为何不先处理left中的,而是反复left.add()? |
|
y*****e 发帖数: 712 | 46 buf+=bytes;
buf在往后挪啊。。。。 |
|
y*****e 发帖数: 712 | 47 既然是一直往buffer里面写,那是从哪里读的?我就很奇怪这个method signature里竟
然没有source file? |
|
|
|