所以我有一些代码从文件中读取一定数量的字节并返回结果字节数组(这基本上用于分块文件以通过网络发送(最终)base64编码的ascii文本).
它工作正常,除了生成文件的最后一个块时,它不是一个完整的块.因此,生成的字节数组不满.但是,它是一个恒定的大小,这意味着文件被重新组装,有一大堆额外的数据(可能是0)附加到末尾.
我怎样才能使文件的最后一个块的byte []真正只包含它需要的数据?代码如下所示:
private byte[] readData(File f, int startByte, int chunkSize) throws Exception {
RandomAccessFile raf = new RandomAccessFile(f, "r");
raf.seek(startByte);
byte[] data = new byte[chunkSize];
raf.read(data);
raf.close();
return data;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果chunkSize大于文件中的剩余字节,则返回一个完整大小的byte [],但它只有半满的数据.
我正在开发 ac# 应用程序,该应用程序会生成新的进程来运行 Perl 程序:
我想知道是否有办法使用套接字接口让 perl 程序与 c# 应用程序对话。如果使用套接字,地址必须是本地主机:127.0.0.1?如何选择使用哪个端口号?
还,
既然C#应用产生了一个Process来运行Perl程序,那么有没有办法在c#中使用进程间通信来实现这个任务呢?我的意思是也许运行 perl 的进程可以向 c# 应用程序发送消息?
谢谢。
我有一个字符串列表,我需要能够简单地探测表中是否有新字符串.当列表很大时,直接测试一个简单的列表是非常低效的......所以通常我使用Dictionary来获得恒定的查找速度,尽管我实际上并不关心这个值.这似乎是对字典的滥用,所以我想知道我可以采取的其他方法.
有没有更好的方法来进行我不知道的命中测试?
单击SEND后如何清除TextBox?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
namespace SocketClient
{
public partial class SocketClient : Form
{
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
NetworkStream serverStream = default(NetworkStream);
string readData = null;
public SocketClient()
{
InitializeComponent();
}
private void getMessage()
{
while (true)
{
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[10025];
buffSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, buffSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
readData = …Run Code Online (Sandbox Code Playgroud) 假设我有一个看起来像这样的字符串:
str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"
Run Code Online (Sandbox Code Playgroud)
您会注意到字符串中有很多位置,其中有一个&符号,后跟一个字符(例如"&y"和"&c").我需要用字典中的适当值替换这些字符,如下所示:
dict = {"&y":"\033[0;30m",
"&c":"\033[0;31m",
"&b":"\033[0;32m",
"&Y":"\033[0;33m",
"&u":"\033[0;34m"}
Run Code Online (Sandbox Code Playgroud)
最快的方法是什么?我可以手动找到所有的&符号,然后循环通过字典来改变它们,但这似乎很慢.做一堆正则表达式替换似乎也很慢(我的实际代码中将有一个大约30-40对的字典).
任何建议表示赞赏,谢谢.
编辑:
正如在这个问题的评论中所指出的,我的字典是在运行时之前定义的,并且在应用程序生命周期的过程中永远不会改变.它是ANSI转义序列的列表,其中将包含大约40个项目.我要比较的平均字符串长度大约为500个字符,但最多可达5000个字符(但这些字符很少见).我目前也在使用Python 2.6.
编辑#2 我接受Tor Valamos的回答是正确的,因为它不仅提供了有效的解决方案(虽然它不是最好的解决方案),而是考虑了所有其他解决方案并做了大量的工作来比较所有这些.这个答案是我在StackOverflow上遇到过的最好,最有帮助的答案之一.感谢你.
有人可以解释什么是"不正确的清单"吗?
注意:谢谢大家!你们所有人摇滚!
我想将网页中的所有网址(域名后面的内容)重定向到一个网页,该网页将分析完整的网址并显示好的网页和信息.我知道可以使用Mod_Rewrite并使用一些PHP函数来获取URL但我找不到任何好的网页显示步骤以及如何操作.
我的问题是:
1)你有任何我能读到的参考资料吗?
2)你认为这是一个很好的方法,我正在改造一个网站,需要更多的搜索引擎友好,并要求有良好的网址格式?
我正在编写一个Win32 DLL,其函数可以将目录添加到Windows PATH环境变量(在安装程序中使用).
在DLL运行后查看Regedit或控制面板中的环境变量,向我显示我的DLL已成功添加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment和的路径HKEY_CURRENT_USER\Environment.
但是当我启动一个新的命令提示符(运行DLL之后)时,我添加的目录没有显示在输出中echo %PATH%,我无法通过键入其名称来访问该目录中的可执行文件.
我认为我的程序没有很好地通知系统PATH已经改变,或者它可能在更改完全生效之前通知它们.我阅读了微软的一篇文章,该文章说WM_SETTINGCHANGE在更改环境变量后广播该消息,我正在使用以下代码:
DWORD result2 = 0;
LRESULT result = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, &result2);
if (result == 0){ /* ... Display error message to user ... */ }
Run Code Online (Sandbox Code Playgroud)
我的电话的顺序是:RegCreateKeyEx,RegSetValueEx,RegCloseKey,SendMessageTimeout
如果我在控制面板"环境变量"窗口中按"确定",我的DLL对PATH所做的更改将显示在新创建的命令提示中,因此控制面板正在做一些事情来传播PATH更改; 我想弄明白它是什么,做同样的事情.
有谁知道我应该怎么做?
我正在运行64位Windows Vista,但我希望这适用于所有Windows XP,Vista和Windows 7操作系统.
更新: 我上面发布的代码的问题是我没有在"环境"字符串上放置L前缀.虽然它没有明确地说明我在Microsoft文档中的任何地方,但LPARAM需要是指向WCHAR字符串(2字节字符)而不是CHAR字符串的指针,这是Visual Studio编译器默认生成的当我写一个字符串文字.我的问题的解决方案是将"环境"改为L"环境".(我以为在发布这个问题之前我已经尝试过了,但显然我没有正确地尝试过!)但是任何想要完成这个任务的完整C++解决方案的人都应该看看Dan Molding的答案.
我正在努力养成进行代码审查的习惯,但合并一直使这个过程变得困难,因为我不知道如何让Mercurial"只显示合并引入的更改,而这些更改并非存在于其父级中".
或者,稍微更正式(感谢Steve Losh):
向我展示合并中的每一块都没有出现在它的任何一个父母身上,并告诉我其父母中任何一个不存在于3中的大块.
例如,假设我有一个包含两个文件a和b的存储库.如果在修订版1中更改了"a",则在修订版2(在单独的分支上)中更改"b",并且这两个更改在修订版3中合并,我将获得如下所示的历史记录:
@ changeset: 3
|\ summary: Merged.
| |
| o changeset: 2
| | summary: Changing b
| |
o | changeset: 1
|/ summary: Changing a
|
o changeset: 0
summary: Adding a and b
但是,如果我要求查看修订版3引入的更改hg di -c 3,Mercurial将向我显示同样的事情,就像我要求查看修订版1中引入的更改一样hg di -c 1:
$ hg di -c 3
--- a/a
+++ b/a
@@ -1,1 +1,1 @@
-a
+Change to a
$ hg di -c 1
--- a/a
+++ b/a
@@ -1,1 … 十六进制值为1679EDDF2CFD1455
我期待十进制等值为1.619587084 X 10 ^ 18
如果可能,有人可以确认这一点,如果可能的话,我会喜欢十进制值的更多有效数字.
先感谢您.
c# ×3
.net ×1
apache ×1
byte ×1
bytearray ×1
c++ ×1
dictionary ×1
environment ×1
erlang ×1
file ×1
file-io ×1
hex ×1
java ×1
lisp ×1
mercurial ×1
merge ×1
performance ×1
perl ×1
php ×1
process ×1
python ×1
regex ×1
registry ×1
replace ×1
scheme ×1
sockets ×1
string ×1
unique ×1
url-routing ×1
winapi ×1
winforms ×1