transfer翻译:
vt.使转移;使调动;转让(权利等);让与。
vi.转让;转学;转乘;转会(尤指职业足球队)
n.转移;调动;换乘;(运动员)转会。
CET4 IELTS GRE 考 研 TOEFL CET6。
transfer
音节划分:trans▪fer
英 [trænsˈfɜ:(r)]。
美 [trænsˈfɚ]
vt. 使转移;
使调动; 转让(权利等); 让与。
vi. 转让;
转学; 转乘; 转会(尤指职业足球队)
n. 转移;
调动; 换乘; (运动员)转会。
过去式: transferred。
过去分词: transferred。
现在分词: transferring。
第三人称单数: transfers。
派生词:transferee transferor 。
transferrer
双语例句
1. Anton was able to transfer from 。
Lavine's to an American company.。
安东成功地从拉文调到了一家美国公司.。
来自柯林斯例句
2. Encouraging teacher transfer would 。
not, by itself, integrate the teaching corps.。
鼓励教师调动本身不会消弭教学队伍中的种族隔离。
来自柯林斯例句
3. He wants to transfer some money to 。
the account of his daughter.。
他想把一些钱转到女儿的账户上。
来自柯林斯例句
4. Football clubs have been busy in the close season transfer market.。
足球俱乐部在休赛季节的转会市场上一直忙个不停。
来自柯林斯例句
5. He expected the transfer to go 。
through by today's noon deadline.。
他希望转账在今天中午的最后期限之前完成。
来自柯林斯例句
查看更多例句>>
词根:fer
=bring/carry,表示"带来,拿来"。
同根词
adj.
indifferent冷漠的 (in不+different不同的→同与不同的"事不关已" →冷漠的)。
referable可归[起]因于……的, 可归入……的; 与……有关的 (refer[v.参考,查询;提到,引用,涉及;提交,上呈]+able能……的→能提到的,能找到原因的→可归于……)。
inferable能推理的, 能推论的 (infer[v.推论,推断]+able能……的→adj.能推理的, 能推论的)。
n.
offer出价,提议,意图 (of一再+fer带来,拿来→一再带来→提供)。
proffer提议,建议 (pro向前+ffer=fer带来,拿来→带到前面去→贡献出来)。
preference[for,to]偏爱,喜爱;优惠;优先选择 (prefer[v.[to]更喜欢,宁愿]+ence表名词→n.[for,to]偏爱,喜爱;优惠;优先选择)。
n.&v.
transfer转移;转换;转让;过户;迁移;改乘 (trans变换,交换+fer带→转移过去→转学,转移)。
v.
confer商讨;授予,颁给[勋衔,学位等] (con共同+fer带来,拿来→共同带来观点)。
prefer[to]更喜欢,宁愿 (pre先+fer带来→预先就带来→更喜欢)。
offer提供,提议,出现 (of一再+fer带来,拿来→一再带来→提供)。
前缀:trans-
1. 表示"变换,改变,转移"; 。
2. 表示"横过,越过"
同缀词
adj.
translucent半透明的 (trans横过,越过+luc光+ent……的→穿过去看到光)。
transparent透明的 (trans横过,越过+par看见+ent……的→横穿过去看得一样清楚→透明的)。
transverse横向的, 横断的 (trans横过,越过+vers转+e→adj.横向的, 横断的)。
n.
transaction交易;办理 (trans变换,改变,转移+action行动→交换行动→交易)。
transport运输;运输系统,运载工具 (trans变换,改变,转移+port运→搬运转移→运输)。
n.&v.
transplant移植 (trans变换,改变,转移+plant种→转移过去→移植)。
transfer转移;转换;转让;过户;迁移;改乘 (trans变换,改变,转移+fer带→转移过去→转学,转移)。
v.
transgress冒犯;违背 (trans横过,越过+gress走→横着走→冒犯)。
transform改变,变换;变压;转化;改造,改造 (trans变换,改变,转移+form形状→改变形状)。
transcend超越,胜过 (trans横过,越过+scend爬→爬过→超越)。
同义词
deliver over hand pass change hands。
move, shift, transfer, remove。
这些动词均可表示“从一处移往另一处”之意。
move: 普通用词,指从一处到另一外的任何距离的转移。
shift: 侧重位置与方向的改变。
transfer: 一般表示转送或移交迁移,尤指交通运输中的换乘或职务的调动等。
remove:
作"移动"解时,与move可换用,还可指撤职或开除学藉等。
查看更多内容>>
语源
late Middle English (as a verb): from French transférer or Latin 。
transferre, from trans- 'across' + ferre 'to bear'. The 。
earliest use of the noun (late 17th cent.) was as a legal term in the sense 。
'conveyance of property'。
柯林斯高阶英汉双解学习词典
英汉双向大词典
The verb is pronounced /træns'fɜː/. The noun is 。
pronounced /'trænsfɜː/. 动词读作 /træns'fɜː/。名词读作 /'trænsfɜː/。
1. V-ERG
及物/不及物动词
(使)转移;(使)迁移 If you transfer something or someone 。
from one place to another, or they transfer from one place 。
to another, they go from the first place to the second. 。
【语法信息】:V n from/to n。
【语法信息】:V from/to n。
【搭配模式】:oft N of n。
Remove the wafers with a spoon and transfer them 。
to a plate...
用勺子抄起薄饼,把它们转盛到盘子里。
He was transferred from Weston Hospital to 。
Frenchay…
他从韦斯顿医院转院到了法兰查。
He wants to transfer some money to the account 。
of his daughter…
他想把一些钱转到女儿的账户上。
The person can transfer from wheelchair to seat 。
with relative ease.。
那个人可以比较轻松地从轮椅上移到座位上。
Transfer is also a noun.。
Arrange for the transfer of medical records to 。
your new doctor...。
安排一下把病历转给你的新医生的事宜。
The bank reserves the right to reverse any transfers or payments.。
银行保留撤销任何转账或支付操作的权利。
2. V-ERG
及物/不及物动词
(使)转移,传播,移交 If something is transferred, or 。
transfers ,from one person or group of people to another, 。
the second person or group gets it instead of the first. 。
【语法信息】:V n from/to n。
【语法信息】:V from/to n。
I realized she'd transferred all her love from 。
me to you...
我意识到她已把所有的爱从我身上转移到了你身上。
The chances of the disease being transferred to 。
humans is extremely remote…
该疾病传播到人类身上的几率微乎其微。
On 1 December the presidency of the Security Council automatically transfers from the US to Yemen.。
12 月 1 日,联合国安全理事会的轮值主席国职位自动地由美国移交给也门。
Transfer is also a noun.。
...the transfer of power from the old to the new 。
regimes.
新旧政权的权力移交
3. N-VAR
可变名词
(技术)转让 Technology transfer is the process or act 。
by which a country or organization which has developed new technology enables 。
another country or organization to use the technology. 。
【搭配模式】:supp N
The Philippines needs capital and technology transfer...。
菲律宾需要资本与技术转让。
There will be a transfer of technology from this 。
country to Mongolia.。
这个国家将会向蒙古国进行技术转让。
4. V-ERG
及物/不及物动词
(使)(运动员)转会 In professional sports, if a player 。
transfers or is transferred from one club to another, they leave 。
one club and begin playing for another. 。
【语法信息】:V from/to n。
【语法信息】:be V-ed from/to n。
【语法信息】:Also V n from/to n。
【语域标签】:BRIT 英
...Nick Barmby who transferred from Spurs to 。
Middlesbrough...。
从热刺队转会到米德尔斯伯勒队的尼克·巴尔姆比。
He was transferred from Crystal Palace to 。
Arsenal for £2.5 million.。
他以 250 万英镑的身价从水晶宫队转入阿森纳队。
Transfer is also a noun.。
...Gascoigne's transfer to the Italian club, 。
Lazio.
加斯科因转会到意大利俱乐部拉齐奥。
in AM, use 美国英语用 trade。
5. V-ERG
及物/不及物动词
(使)调动;(使)换岗 If you are transferred, or if you 。
transfer ,to a different job or place, you move to a different job 。
or start working in a different place. 。
【语法信息】:be V-ed from/to n。
【语法信息】:be V-ed
【语法信息】:V from/to n。
【语法信息】:Also V n。
I was transferred to the book department...。
我被调到图书部。
I suspect that she is going to be transferred...。
我猜想她要被调走了。
Anton was able to transfer from Lavine's to an 。
American company.。
安东成功地从拉文调到了一家美国公司。
Transfer is also a noun.。
They will be offered transfers to other 。
locations.
他们将会被安排调任到其他地方。
6. VERB
动词
转存;转录
When information is transferred onto a different medium, it is copied 。
from one medium to another. 。
【语法信息】:be V-ed onto/to n。
【语法信息】:V n onto/to n。
Such information is easily transferred onto 。
microfilm.
这种信息很容易转存到缩微胶卷上。
...systems to create film-quality computer effects and then transfer them to film.。
创造胶片级电脑画质并将之转录到胶片的系统。
Transfer is also a noun.。
It can be connected to a PC for the transfer of 。
information.
它可以与个人电脑连接进行信息转存。
...data transfer.。
数据转存
7. VERB
动词
转让,让与(财产、土地) When property or land is transferred, 。
it stops being owned by one person or institution and becomes owned by another. 。
【语法信息】:V n from/to n。
【语法信息】:be V-ed
【语法信息】:Also V n。
【FIELD标签】:LEGAL 法律。
He has already transferred ownership of most of 。
the works to a British foundation...。
他已把大部分作品的所有权转让给一家英国基金会。
Certain kinds of property are transferred 。
automatically at death.。
死亡时某些财产会自动转让。
Transfer is also a noun.。
...an outright transfer of property.。
财产的全部让与
8. V-ERG
及物/不及物动词
(使)转乘;(使)换乘 If you transfer or are 。
transferred when you are on a journey, you change from one vehicle to 。
another.
【语法信息】:V from/to n。
【语法信息】:be V-ed from/to n。
He likes to transfer from the bus to the Blue 。
Line at 103rd Street in Watts...。
他喜欢在华兹区第 103 大街下公交车转乘地铁蓝线。
1,654 passengers were transferred at sea to a 。
Norwegian cruise ship.。
1,654 名乘客在海上转搭了一艘挪威游轮。
9. N-COUNT
可数名词
转印纸(纸上面印有图案,可通过加热或压力转印至其他材料上) Transfers are pieces 。
of paper with a design on one side. The design can be transferred by heat or 。
pressure onto material, paper, or china for decoration. 。
...gold letter transfers.。
金字转印纸
10. N-COUNT
可数名词
换乘票;转车票;通票 A transfer is a ticket that you get 。
when you leave a bus or train that allows you to go on a different bus or train 。
without paying again. 。
vt. & vi.
1. 转移; 迁移
I intend to transfer the property to my son.。
我想把这笔财产转给我儿子。
The company has transferred to an eastern location.。
这家公司已搬到东部某地。
vt.
1. 转让; 让渡
To preserve the farm intact, he transferred it to one heir.。
为了保持这个农场的完整,他将它移交给一个继承人。
2.
(使)调动;转职;转学;改变(环境)
3.
转移(感情);传染(疾病);让与,转让(权力等)
4. 转会(尤指职业足球队)
That footballer has been transferred to AC Milan.。
那个足球运动员已经转会到AC米兰队。
5. 转存,转录(资料、音乐等);改编。
6. 改变;转变;变换
to transfer wasteland into fertile fields。
把荒地变成良田
n.
1. 转移; 转让; 转录
The manager arranged for his transfer to another football club.。
经理安排他转会到另一个足球俱乐部。
2. 中转, 换乘, 改变路线。
You can take the subway and then transfer to a bus.。
你可先乘地铁然后换乘公共汽车。
3. (运动员)转会
4. 转车票;换乘票
5.
转印图画,转印图案(利用挤压或加热,可从纸上转印到物体的表面上)
vi.
1. [美国英语]换车(或船);(使在旅途中)转乘,换乘,倒车。
At Birmingham I transferred to another coach.。
我在伯明翰换乘另一辆大客车。
2. [美国英语]转学;转校;转系;转会;调动。
She has transferred from the Department of History to the Department of 。
English.
她已经由历史系转到英语系了。
adj.
1.
转移支付的;转付款项的
TOT是英文Transfer-Operate-Transfer的缩写,即移交——经营——移交。TOT方式是国际上较为流行的一种项目融资方式,通常是指政府部门或国有企业将建设好的项目的一定期限的产权或经营权,有偿转让给投资人,由其进行运营管理;投资人在约定的期限内通过经营收回全部投资并得到合理的回报,双方合约期满之后,投资人再将该项目交还政府部门或原企业的一种融资方式。
运作程序
1、制定TOT方案并报批。转让方须先根据国家有关.规定编制TOT项目建议书,征求行业主管部门同意后,按现行规定报有关部门批准。国有企业或国有基础设施管理人只有获得国有资产管理部门批准或授权才能实施TOT方式。
2、TOT项目招标。按照国家规定,需要进行招标的项目,须采用招标方式选择TOT项目的受让方,其程序与BOT方式大体相同,包括招标准备、资格预审、准备招标文件、评标等。
3.5可以了啊,
流程:申请入学-》申请签证
我就主要讲入学、转学分这一块哈 签证只要是学生签证都一样(资金问题+合理的study plan)
1. 什么是转学生,哪些人具有转学的资格。
一般来讲 在国内读了1-2年然后在国外完成剩余课程 即拿到国外该大学的学位(我说的是本科啊,研究生的事情不清楚) 比如concordia一个学位120个学分 你至少要60个学分在他那里修---来源:听一个认识的concordia的同学说的。基本上是大一读完读读大二, 要么大二读完去读大三。如果你已经在上大三了 那就不符合转学的要求。加拿大的转学查不多也是这样,不过有案例是大三在读 能完成150个学分还居然能转过去,那就要看学校了(那个学校的名字我忘记掉了,记得好象学校不大) 不同的学校要求不同,如果你大三了 那就更你想去的学校联系一下 问问到底你这个情况可以转不可以。还有,申请的时候课程也有要求,比如数学专业的申请转学 如果我没记错的话 mcgill要求至少一年的物理,象我只有一个学期 我也就不碰运气去申了,具体是什么要求 还的看学校的网站上是怎么说的。
2. 奖学金问题
美国的情况是 除了一些学校比如yale harvard有financial aid之外,一般都要你自己掏钱,我没发现给奖学金给transfer student的(可能我孤陋寡闻)。加拿大给的entrance scholarship也很少的,顶多意思意思的数量,转学生就不要想了,人家给不给都是问题。俺算脸皮巨厚的,受到UT的录取之后 还专门发邮件去问学校的老师,老师回复说是查了查我的材料说“发现我是转学生,uc学院没有任何入学奖给转学生的” :( 奖学金有些学校是和录取信一块来的,有些学校是录取定了之后过段时间在分配entrance scholarship。反正这个问题,转学生是蛮郁闷的,转掉的学分就当奖把,呵呵。
3.材料准备:
加拿大一般要求大学高中成绩单 高考成绩 汇考成绩 毕业证书,看学校的,有些学校有些要有些不要,不象美国还要写essay。美国真叫个累 还要推荐信 牛校有些转学生还要好几封,大学dean一封,大学教授一封,高中principal一封,高中老师再一封,我ft, 相比加拿大简直太轻松了。申请加拿大中国学生只要t就够了,不像去美国最好还有SAT。 如果你手里有比较有分量的推荐信 那就给加拿大寄过去把,因该对申请有利的。转学生还有一个是比较特殊的,课程描述,这个问题后面详细讲。
4.截止时间
美国是转学生和新生的招生严格分开的,截止时间也不一样,新生冬天查不多截止了,转学生查不多2-3月,还有4月截止的,有写学校特殊,比如 哥伦比亚大学,不是和美国一样的系统都必须申请新生不能申请转学生,加洲大学几个分校截止都挺早的11月就截止了。 加拿大的记不清了,反正加拿大有个说法 越早申请越好。
5.转学分
时间:一般是你被录取后才进行的。以UT为例,录取的一包材料里面有转学分的资料,看着照做,先交30块的评估费用,然后他们开始处理,缺什么材料他们回通知你的,(我在申请的时候就交了课程描述,所以不缺) 然后收到transfer credit section的信是分配了几个advisor,不同的系的,计算机的/物理的/数学的。。。系里的老师专门评估,要你和他们联系约个时间 interview, 俺是还没拿到签证 发了邮件和advisor联系,有两个老师看我原来修的课也不多,case不是很复杂就答应不需要面视 说了些,知道我学的是什么了就转掉了,有个老师坚持要我去interviw他说很乐意等到我拿到签证,我ft. 系里的老师评估完 在报告给transfer credit section,最终是由他们决定的。做出决定后发给你transfer credit assessment letter. 这个过程宣告结束,去了转的课都不用修了。转的学分原来国内学校的分数不计入你后来所在的学校的gpa中。
不是所有学校过程都象UT这么烦琐的,个个学校还是情况不同,听说一个转学分的人说他要求了一下 学校马上弄出来了,我倒 真方便。
6.关于课程描述
课程描述就是把你上的课简单的用英语描述一下,目的是上外国老师知道你上的是什么内容的课,什么程度 什么深度。转学分的标准就是你上过的课他们学校有没有 如果有的话 一样不一样,一样就能转。
课程描述什么时候递交?可以在申请的时候递交,也可以在录取时候递交(这样可能会耽误一点时间)反正评估工作是在录取以后才开始的。
课程描述包含什么信息?要不要盖章?参看http://bbs.gter.net/bbs/showthre ... 1021662#post1021662。
我是盖了,不盖没试过,不知道。
课程描述怎么样个样子,国外学校网站上都可以找到course description。
以UT为例
CSC108H1
Introduction to Computer Programming 39L, 12T, 12P 。
Structure of computers; the computing environment. Programming in an object-oriented language such as Java. Program structure in an object-oriented language: classes, objects, methods, fields. Internal structure of methods: elementary data types, statements, control flow. Arrays; searching, sorting and complexity. Practical (P) sections consist of supervised work in the computing laboratory. These sections are offered when facilities are available, and attendance is required.。
Exclusion: CSC107H1, 139H1, CSC148H1, 149H1, CSC150H1.。
NOTE: You may not take this course after or concurrently with CSC148H1, but you may take CSC148H1 after CSC108H1.。
Prerequisite: Grade 12 U/OAC mathematics 。
课程名字,学分,授课方式,课程内容,象国内都没有Exclusion那不写也没关系,外国学校的课描看来看去都查不多长一个样,美国学校的也查不多的,
比如 stony brook university:
cs130 *******。
Course Description:。
[New Spring 2004]。
Introduces programming concepts using the C language. Variables, data types, and expressions. Conditional and iterative statements, functions, and structures. Pointers, arrays, and strings. Scope of variables and program organization. Includes programming projects of an interdisciplinary nature. Suitable as an introductory programming course for non-CSE majors.。
Prerequisite: Level 3 on the mathematics placement examination。
Credit Information: 3。
看着挺短的,但课程名字,学分,课程内容都包含了。
课程描述交了之后学校要求还要什么材料那再补交把。
7.加拿大签证(这个我是没有经验,我傻子傻想出来的:)
如果你是转学生 只准备了读剩余课程的资金,那我想这个时候要转学分报告发挥作用,你空口说我只要读2年的 所以只提供2年的资金就够了,空口说的 vo不一定信的,转学分评估书拿出来(ft,我到现在还没见过)可能会有点用把。
不觉得transfer拘牵率最高,也不觉得转学的签证通过绿高,好象这个和转学没什么关系 还是和资金+学习计划有关。如果你国内学校巨好转到加拿大个角落里的大学,那vo怎么想就和难说了,学习计划要写你转学的必要性----------这个又是我这个傻子傻想出来的,呵呵 我悲剧了,不过vo没勾是学习计划问题。
呵呵 响应寄托斑竹号召,也觉得写点很有必要,转学成功的人看着在坛子里面隐约还是不少的 留下的东西到不多,那我就把我知道的写写把。就写到这里,看还有什么漏的,以后补充,如果有错的请不吝赐教 希望别误到别人。
注意:以上内容是个大致意思+体会,具体信息请到学校网站上查阅,应为每年都可能有变化,每个学校情况也不一定一样,有特殊问题都可以给学校发邮件问 他们都会回答你的。最后,good luck。
前段时间在项目中看到如下的代码:
HttpServletResponse response = (HttpServletResponse)servletResponse;。
response.setHeader("Transfer-Encoding", "utf8");。
filterChain.doFilter(servletRequest, servletResponse);。
原意是想对输出的内容进行编码,却用错了响应头,结果这个错误的响应头对后面的客户端程序带来了许多麻烦。这里有必要对这个这块的内容进行详细地了解。
传输数据编码:Transfer-Encoding。
数据编码,即表示数据在网络传输当中,使用怎么样的保证方式来保证数据是安全成功地传输处理。可以是分段传输,也可以是不分段,直接使用原数据进行传输。
有效的值为:Trunked和Identity. 。
传输内容编码:Content-Encoding。
内容编码,即整个数据信息是在数据器端经过怎样的编码处理,然后客户端会以怎么的编码来反向处理,以得到原始的内容。这里的内容编码主要是指压缩编码,即服务器端压缩,客户端解压缩。
可以参考的值为:gzip,compress,deflate和identity。
传输内容格式:Content-Type。
内容格式,即接收的数据最终是以何种的形式显示在浏览器中。可以是一个图片,还是一段文本,或者是一段html。内容格式额外支持可选参。
数,charset,即实际内容的字符集。通过字符集,客户端可以对数据进行解编码,以最终显示可以看得懂的文字(而不是一段byte[]或者是乱码)。
3种描述信息,可以由下图来表示(来源于《Http权威指南》):
从上文中,可以看出,实际上原filter中的内容可能是想表达以下的意思:。
response.setContentType("text/html;charset=UTF8");。
//或者
response.setContentType("application/json;charset=UTF8");。
内容长度:Content-Length。
内容长度,即表示整个传输内容的有效长度信息。客户端可以通过此头信息来判断接收的数据是否已经完全接收。此编码和transfer-encoding相。
冲突,因为transfer-encoding会通过额外的处理方式来改变数据的组织方式,就会改变实际的数据长度,如果客户端仍按照原content-。
length来处理的话,则不会接收到完整的数据。
由于transfer-encoding和content-length之间存在冲突问题,因此在服务端和客户端就会有相应的实现来支持相应的数据处理。整个处理过程按照RFC 2616来处理。
处理规则:(http://tools.ietf.org/html/rfc2616#page-119所述)。
If a Content-Length header field (section 14.13) is present, its。
decimal value in OCTETs represents both the entity-length and the。
transfer-length. The Content-Length header field MUST NOT be sent。
if these two lengths are different (i.e., if a Transfer-Encoding。
header field is present). If a message is received with both a。
Transfer-Encoding header field and a Content-Length header field,。
the latter MUST be ignored.。
即通常使用content-length来表示内容长度。但如果存在transfer-encodig时,就不能再使用content-。
length了,而且也不应该再出现content-length头。既使服务器端同时有2个头信息,content-length也应该被忽略。
服务器端实现Tomcat。
tomcat在实现transfer-encoding时默认采用trunked传输,但如果应用指定追加了content-length,则。
会使用content-length的值,就不再追加transfer-encoding了。相应的实现在类。
AbstractHttp11Processor方法prepareResponse中(tomcat7.0.52版本):。
//先判断是否存在,contentLength头,即应用调用setContentLength方法,如果调用了。这里获取的值肯定不为-1。
long contentLength = response.getContentLengthLong();。
boolean connectionClosePresent = false;。
if (contentLength != -1) {。
headers.setValue("Content-Length").setLong(contentLength);。
//因为使用了content-length,所以在数据传输时,就不再进行额外处理了,直接将原数据输出至客户端即可。
getOutputBuffer().addActiveFilter。
(outputFilters[Constants.IDENTITY_FILTER]);。
contentDelimitation = true;。
} else {
// If the response code supports an entity body and we're on。
// HTTP 1.1 then we chunk unless we have a Connection: close header。
connectionClosePresent = isConnectionClose(headers);。
//这里即默认使用trunked,但需要有相应的前提。
//如果客户端显示设置Connetion:close时,即表示客户端只会请求一次,不会使用Keep-Alive,这样的话,不需要使用trunked传输,
//因为客户端知道何时数据已经传输完,使用read() == -1即可判断。
if (entityBody && http11 && !connectionClosePresent) {。
//使用ChunkedOutputFilter来对传输的数据二次处理,即分段传输。
getOutputBuffer().addActiveFilter。
(outputFilters[Constants.CHUNKED_FILTER]);。
contentDelimitation = true;。
headers.addValue(Constants.TRANSFERENCODING).setString(Constants.CHUNKED);。
} else {
//最后使用原始数据传输方式
getOutputBuffer().addActiveFilter。
(outputFilters[Constants.IDENTITY_FILTER]);。
}
}
此段代码将在应用处理完逻辑或者调用response.outputStream.write时会调用。详细的处理逻辑,可参考上文中的注释。
需要注意的是,由于Http工作在TCP/IP之上,因此数据的完整性保证已经不需要由Http来处理了。所以依靠trunked来保证数据完。
整性已经没有太大意义。现在trunked的意义在于针对keep 。
alive传输时,trunked可以通过特殊的处理来告诉客户端(通过发送头长度0来标识),该次的数据已经响应完毕。客户端可以处理并再次使用该连接。
进行下一次处理了。所以在上面的trunked处理中,tomcat如果认为没有使用trunked的必要时,就不会强制使用trunked了(如。
connection:close这种一次性请求模型)。
客户端实现HttpClient。
httpclient(版本4.3.3)的主要实现在类EntityDeserializer中,即如何去获取数据并反向解码。实现方法为doDeserialize,主要的实现如下所示:
final long len = this.lenStrategy.determineLength(message);。
if (len == ContentLengthStrategy.CHUNKED) {。
entity.setChunked(true);。
entity.setContentLength(-1);。
entity.setContent(new ChunkedInputStream(inbuffer));。
} else if (len == ContentLengthStrategy.IDENTITY) {。
entity.setChunked(false);。
entity.setContentLength(-1);。
entity.setContent(new IdentityInputStream(inbuffer));。
} else {
entity.setChunked(false);。
entity.setContentLength(len);。
entity.setContent(new ContentLengthInputStream(inbuffer, len));。
}
即通过判断lengh值来确定是使用不同的数据解析。解析出来的流处理共有3种不同的处理方式,即transfer-encoding中指定的chunked和identity,以及由content-length指定的处理方式。
对length的判断逻辑如下所示: 。
final Header transferEncodingHeader = message.getFirstHeader(HTTP.TRANSFER_ENCODING);。
// We use Transfer-Encoding if present and ignore Content-Length.。
// RFC2616, 4.4 item number 3。
//首先根据RFC26216 4.4中介绍的,首先处理transfer-encoding。
if (transferEncodingHeader != null) {。
final HeaderElement[] encodings;。
encodings = transferEncodingHeader.getElements();。
// The chunked encoding must be the last one applied RFC2616, 14.41。
final int len = encodings.length;。
//只判断是否和trunked和identity相等,在都不相等的情况下默认使用identity,以避免解析出错的情况。
if (HTTP.IDENTITY_CODING.equalsIgnoreCase(transferEncodingHeader.getValue())) {。
return IDENTITY;。
} else if ((len > 0) && (HTTP.CHUNK_CODING.equalsIgnoreCase(。
encodings[len - 1].getName()))) {。
return CHUNKED;。
} else {
return IDENTITY;。
}
}
//然后再使用content-length,这里同样判断,只有在确定好conten-length的情况下才使用,如果确定不好,仍然使用identity。
final Header contentLengthHeader = message.getFirstHeader(HTTP.CONTENT_LEN);。
if (contentLengthHeader != null) {。
long contentlen = -1;。
final Header[] headers = message.getHeaders(HTTP.CONTENT_LEN);。
contentlen = Long.parseLong(header.getValue());。
}
if (contentlen >= 0) {。
return contentlen;。
} else {
return IDENTITY;。
}
}
在以上的处理当中,我们看到identity处理方式最多的。可以理解为,只要是不能解析的都使用identity,即原始处理方式。
通过以上的实现,可以了解客户端在接收完数据之后的不同响应方式和处理逻辑,这也能解释在项目中的奇怪情况了。
问题出现及解决
在我们的项目中,由于上面的错误的filter的问题。我们在之前使用httpclient在接收数据时(使用httpPost),本来想接收一个json数据串,即总是返回类似以下的数据:。
20
{abxxx.......}
这种情况只在处理我们请求的服务才会出现,请求其它之前的项目服务不会出现。多次发现这个特殊的值,好像表示数据长度。在不知道原因的情况下,我们通过在服务中加入以下代码之后,问题好像就解决了:
byte[] bytes = generatedBytes();//生成json bytes数组信息。
response.setContentLength(bytes.length);//强制性设置contentLength值。
response.getoutputStream.write(bytes);。
但又有一个问题发生了,发现响应很慢。每次请求都要花费接近20s的时间,但监控服务代码,响应很快的。而且在服务返回之后,客户端需要继续等。
待一段时间才返回数据。经debug代码,最终发现httpclient在使用EntityUtils.toString中是这样写的:。
final Reader reader = new InputStreamReader(instream, charset);。
final CharArrayBuffer buffer = new CharArrayBuffer(i);。
final char[] tmp = new char[1024];。
int l;
while((l = reader.read(tmp)) != -1) {。
buffer.append(tmp, 0, l);。
}
return buffer.toString();。
这里的while循环在连接未关闭的情况下会一直等待。结合到keepAlive属性,这里肯定默认会使用keepAlive进行请求,而后服务器也肯定没有关闭连接。因此,我们又在使用httpClient时,强制加入以下头:
httpPost.addHeader("Connection","Close");。
这样声明客户端只会请求一次,就断开连接。