我正在尝试使用interact函数生成交互式Haskell程序map.
这是我在ghci中得到的(据我所知,这是所有教程解释interact用法的方式- 结果除外).
*Module> interact $ unlines . map (++ "!") . lines
tteesstt
!
Run Code Online (Sandbox Code Playgroud)
请注意,实际发生的是我输入的每个字符都会立即重复,然后按Return键后会出现感叹号.然而,我期待这样:
*Module> interact $ unlines . map (++ "!") . lines
test
test!
Run Code Online (Sandbox Code Playgroud)
如果我使用相同的程序结构,它可以完美地工作,而filter不是map.
Java BufferedInputStream和BufferedOutputStream类的C#等价物是什么?
我正在使用fread()和fwrite()读取和写入套接字.我认为这些功能用于缓冲输入和输出.有没有什么方法可以在使用这些功能的同时禁用缓冲?
编辑:
我正在构建一个远程桌面应用程序,远程客户端似乎"落后于服务器",我不知道可能是什么原因......我认为这可能是因为缓冲读写.但使用setvbuf没有用.
通过"滞后",我的意思是远程桌面客户端在服务器后面运行几秒钟.服务器在特定时刻所做的事情在延迟大约15-20秒后反映在客户端.
另外,我不想使用not-use-fread(),因为它是现有代码的一部分.我不想修改它.我最终可以使用write()和read(),但我想避免它.
我有一个媒体播放器服务,播放互联网流,但我有问题如何在我的xml中显示缓冲百分比,目前我只是显示一条消息,因为我试过的所有方式给了我一个静态长号.这是我的播放器服务的代码:
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
setBufferPosition(percent * getMusicDuration() / 100);
myMain.EstadoRadio.setText(" Reproductor \n Buffering... ");
}
Run Code Online (Sandbox Code Playgroud)
你可以告诉EstadoRadio是我的xml中的一个文本视图,它在myMain活动中工作,我想显示流的缓冲百分比.谢谢你的帮助.
编辑:我在大多数情况下看到使用onBufferingUpdate(MediaPlayer mp,int percent)的'%',如下所示:
myMain.EstadoRadio.setText(" Reproductor \n" + percent + "%");
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,百分比总是-2147483648,我不知道为什么,或者为什么它不会改变或更新,这里有一点来自我的日志猫:
05-17 13:34:37.005: V/MediaPlayer(25382): message received msg=3, ext1=-2147483648, ext2=0
05-17 13:34:37.005: V/MediaPlayer(25382): buffering -2147483648
05-17 13:34:37.005: V/MediaPlayer(25382): callback application
05-17 13:34:37.005: V/MediaPlayer(25382): getDuration
05-17 13:34:37.015: V/MediaPlayer(25382): back from callback
05-17 13:34:38.016: V/MediaPlayer(25382): message received msg=3, ext1=-2147483648, ext2=0
05-17 13:34:38.016: V/MediaPlayer(25382): buffering -2147483648
05-17 13:34:38.016: V/MediaPlayer(25382): callback application
05-17 13:34:38.016: …Run Code Online (Sandbox Code Playgroud) 有一个文件:
:~$ cat fff
qwerty
asdf
qwerty
zxcvb
Run Code Online (Sandbox Code Playgroud)
有一个脚本:
:~$ cat 1.pl
#!/usr/bin/perl
print <STDIN>
Run Code Online (Sandbox Code Playgroud)
该命令按预期工作:
:~$ cat fff | perl -e 'system("./1.pl")'
qwerty
asdf
qwerty
zxcvb
Run Code Online (Sandbox Code Playgroud)
但是此命令将无法按预期工作:第一个<STDIN>读取所有数据,而不是单行.如何禁用<STDIN>的缓冲?
:~$ cat fff | perl -e '$_ = <STDIN>; system("./1.pl")'
:~$
Run Code Online (Sandbox Code Playgroud) 我在亚马逊的S3上有文件.它们以唯一ID命名,因此没有重复项.我正在使用授权的URL访问它们.我需要能够将它们传递给浏览器,但我需要重命名它们.现在我正在使用fopen,但它在将文件提供给浏览器之前将文件下载到我的服务器.如何让文件"通过"我的服务器传递到浏览器?或者我如何缓冲下载 - 将一小块下载到我的服务器并在下载下一个块时将其传递给浏览器?
此外 - 我真的想使用CloudFront,但他们不提供经过身份验证的URL.我相信我可以使用CURL发送请求的凭据 - 我可以使用CURL执行此类"传递"文件服务吗?
谢谢!
我遇到的问题是IO没有按顺序执行,即使在do构造中也是如此.
在下面的代码中,我只是跟踪剩下的卡片,卡片是一个字符元组(一个用于套装,一个用于值)然后用户不断被问到已经播放了哪些卡片.我希望putStr在每个输入之间执行,而不是像现在这样在最后执行.
module Main where
main = doLoop cards
doLoop xs = do putStr $ show xs
s <- getChar
n <- getChar
doLoop $ remove (s,n) xs
suits = "SCDH"
vals = "A23456789JQK"
cards = [(s,n) | s <- suits, n <- vals]
type Card = (Char,Char)
remove :: Card -> [Card] -> [Card]
remove card xs = filter (/= card) xs
Run Code Online (Sandbox Code Playgroud) 我想要的是使用time.sleep()打印出每秒打印一个点的5个点,但结果是在延迟5秒后立刻打印了5个点.
尝试了print和sys.stdout.write,结果相同.
感谢您的任何建议.
import time
import sys
def wait_for(n):
"""Wait for {n} seconds. {n} should be an integer greater than 0."""
if not isinstance(n, int):
print 'n in wait_for(n) should be an integer.'
return
elif n < 1:
print 'n in wait_for(n) should be greater than 0.'
return
for i in range(0, n):
sys.stdout.write('.')
time.sleep(1)
sys.stdout.write('\n')
def main():
wait_for(5) # FIXME: doesn't work as expected
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print '\nAborted.'
Run Code Online (Sandbox Code Playgroud) 我有一个任务对象和__deconstruct(),它意味着在页面的其余部分已经加载后运行一些较长的清理任务.不幸的是,它会缓冲输出,直到任务完成后才会发送它(任务中没有打印任何内容).
我通过http://www.php.net/flush阅读并尝试了所有的建议.显然我已经尝试在php.ini中禁用output_buffering.我已禁用deflate_module,zlib压缩已关闭,没有mod_gzip.调用flush()或ob_flush()无效,也无法启用implicit_flush.
我只是在Windows Server 2008 R2下运行XAMPP(目前是apache 2.2.17,php 5.3.4).PHP正在作为模块运行.
是的,我可以设置一些小的AJAX黑客来运行任务管理器,甚至设置一个计划任务来运行这个特定的任务,但输出缓冲也是其他地方的问题.只是有时它会消失.
从一个类似的线程,有人建议看看以下将做什么:
<?php
while (TRUE)
{
echo 'x';
flush();
sleep(1);
}
?>
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,页面在达到最大执行时间之前不会显示任何内容,此时它会刷新缓冲区.
这已经变得非常令人沮丧.任何人都有什么想法可能导致它缓冲?
我正在使用C++ Std库方法std :: ostream :: write()观察以下行为.
为了缓冲数据,我正在使用以下C++ API
std::ofstream::rdbuf()->pubsetbuf(char* s, streamsize n)
Run Code Online (Sandbox Code Playgroud)
只要我们在文件流上写入数据(datasize)的大小,这样就可以正常工作(使用strace实用程序验证)
std::ofstream::write (const char* s, datasize n)
Run Code Online (Sandbox Code Playgroud)
小于1023字节(低于此值,写入累积直到缓冲区未满),但是当要写入的数据大小超过1023时,不考虑缓冲区并将数据刷新到文件中.
例如,如果我将缓冲区大小设置为10KB并且每次写入大约512字节,则strace将显示多个写入已合并为单个写入
writev(3, [{"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 9728}, {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 512}], 2) = 10240 ( 10 KB )
writev(3, [{"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 9728}, {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 512}], 2) = 10240
...
Run Code Online (Sandbox Code Playgroud)
但是当我一次写入1024个字节(保持缓冲区固定为10 KB)时,现在strace告诉我它没有使用缓冲区,并且每个ofstream :: write调用都被转换为写入系统调用.
writev(3, [{NULL, 0}, {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 1024}], 2) = 1024 ( 1KB )
writev(3, [{NULL, 0}, {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., 1024}], 2) = 1024
...
Run Code Online (Sandbox Code Playgroud)
是否有我缺少的C++ API调用或Linux调优参数?