Remote file transfer applications often involve a situation where a receiving computer (22) contains a reference file (48) that may be similar, or perhaps even identical to, a source file (46) to be transmitted by a sending computer (20). Disclosed is a file transfer method that identifies and isolates the differences between the two files, and transmits only those differences to the receiving computer. The method divides the data in the reference file into a plurality of blocks and associates each block of data with a key value. The key values are then sent to the sending computer in the form of an array. At the sending computer, a block of data at the source file is identified, its key value computed, and the key value is then compared to the keys in the array. If a match is found, an indication of such is sent to the receiving computer. Otherwise, a byte of data from the data block is sent to the receiving computer, and a subsequent block of data is identified and analyzed. The latter steps of the method are repeated until a representation of the source file is present at the receiving computer.
|
0. 33. A method of changing data stored at a receiving unit to match data stored at a source unit, comprising:
determining multiple first keys corresponding to groups of data stored at a first unit;
determining a second key corresponding to a group of data stored at a second unit;
comparing the second key with the multiple first keys;
designating which of the first unit and the second unit are the source unit and the receiving unit; and
transmitting from the designated source unit to the designated receiving unit data corresponding to the second key if the second key matches none of the multiple first keys, and leaving unchanged in the designated receiving unit the data corresponding to the second key if the second key matches one of the multiple first keys.
16. An apparatus for changing data at a receiving unit until the data at the receiving unit is identical to data at a source unit, comprising:
means for determining an array of reference keys corresponding to groups of data stored at the receiving unit;
data transfer means for transmitting the multiple reference keys to the source unit;
means for determining source keys corresponding to groups of source data in the source unit;
means for comparing the source keys with the multiple reference keys;
means for transmitting data from the source unit to the receiving unit when a source key does not match any of the reference keys; and
means for transmitting a control signal from the source unit to the receiving unit when a source key matches a reference key, the control signal causing the receiving unit to use a group of data at the receiving unit corresponding to the matched reference key.
0. 37. A method of transmitting data from a source computer to a receiving computer, the source and receiving computers being connected through a computer data interface, comprising:
dividing a first file into multiple data blocks and associating each data block of the multiple data blocks with a first key value determined in accordance with a key defining method by the data in the data block;
identifying multiple data blocks from a second file and determining second key values in accordance with the key defining method;
using the first and second key values to compare data blocks from the first file and from the second file;
designating which of the first file and the second file are located at the source computer and at the receiving computer; and
for instances in which a match is found between a data block from the first file and a data block from the second file, leaving unchanged the data block stored in the designated receiving computer.
13. A method of changing data at a receiving unit until the data at the receiving unit is identical to data at a source unit, comprising:
(a) determining multiple reference keys corresponding to groups of data stored at the receiving unit;
(b) transmitting the multiple reference keys to the source unit;
(c) determining a source key corresponding to a group of source data in the source unit;
(d) comparing the source key with the multiple reference keys;
(e) transmitting data from the source unit to the receiving unit if the source key does not match any of the reference keys;
(f) transmitting a control signal from the source unit to the receiving unit if the source key matches a reference key, the control signal causing the receiving unit to use data at the receiving unit corresponding to the matched reference key; and
(g) repeating steps (c), (d), (e), and (f) for additional groups of source data in the source unit until the data at the receiving unit is identical to the data at the source unit.
1. A method of transmitting data from a source file located at a sending computer to a receiving computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) dividing a reference file located at the receiving computer into a plurality of data blocks, each data block having a length of n bytes, and associating each data block with a reference key value determined in accordance with a key defining method by the data in that block;
(b) transmitting the reference key values to the sending computer;
(c) identifying blocks of data of length n bytes from the source file, determining source key values in accordance with the key defining method, and using the source and reference key values to compare blocks of data from the reference file to blocks of data from the source file and, in instances where a match is found between a block of data from each file, sending an indication of the match to the receiving computer so that the block of data indicated by the match need not be transmitted to the receiving computer.
25. An apparatus for changing data at a receiving unit so that the data at the receiving unit is identical to data at a source unit, comprising:
means for determining using a key defining method an array of reference keys having lengths of corresponding to data groups having a uniform length of at 256 bytes and stored at the receiving unit;
data transfer means for transmitting the multiple reference keys to the source unit;
means for determining using the key defining method source keys corresponding to groups of source data of the uniform length in the source unit;
means for comparing the source keys with the multiple reference keys;
means for transmitting, when a source key does not match any of the reference keys, less than all the data that is included in the group of source data used to determine the source key; and
means for transmitting a control signal from the source unit to the receiving unit when a source key matches a reference key, the control signal causing the receiving unit to use a group of data at the receiving unit corresponding to the matched reference key.
32. A method of making creating a first reference data file at a first location that is identical to a source data file at a second location, the method comprising the steps of:
(a) identifying a reference file at the first location that may have data identical to the data comprising a source data file;
(b) dividing the data comprising the reference file into a plurality of data blocks having n-bytes per block and associating each data block with a reference key value determined by a key defining method;
(c) transmitting the reference key values from the first location to the second location;
(d) identifying an n-byte block of data from the source data file and computing using the key defining method a current value for a source key associated with the identified block of data;
(e) comparing the current value of the source key with each of the reference key values and, if a match is found, (i) transferring an indication of such to the receiving computer first location, which adds the matching data from the reference file to the a duplicate file, and (ii) repeating step (d); and
(f) if a match was not found in step (e), transferring to the receiving computer first location a subset of the n-byte block of data to be added to the duplicate file and repeating step (d).
5. A method of transmitting data from a source file located at a sending computer to a destination file located at a receiving computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) identifying a reference file at the receiving computer that may have data identical to some of the data comprising the source file;
(b) dividing the data comprising the reference file into a plurality of data blocks having n-bytes per block and associating each data block with a reference key value determined by a key defining method;
(c) identifying an n-byte block of data from the source file and computing using the key defining method a current value for a source key associated with the identified block of data;
(d) comparing the current value of the source key with each of the reference key values and, if a match is found, (i) transferring an indication of such to the receiving computer, and (ii) repeating step (c); and
(e) if a match was not found in step (d), transferring to the receiving computer a subset including less than all the data in the n-byte block of data, removing the subset from the n-byte block of data, adding additional data from the source file to the n-byte block of data, re-computing using the key defining method a current value of the source key, and repeating step (d).
24. A method of changing data at a receiving unit until the data at the receiving unit is identical to data at a source unit, comprising:
(a) determining using a key defining method multiple reference keys corresponding to data groups of length n bytes stored at the receiving unit;
(b) transmitting the multiple reference keys to the source unit;
(c) determining using the key determining method a source key corresponding to a group of source data of length n bytes in the source unit;
(d) comparing the source key with the multiple reference keys;
(e) transmitting data from the source unit to the receiving unit if the source key does not match any of the reference keys;
(f) transmitting a control signal from the source unit to the receiving unit if the source key matches a reference key, the control signal causing the receiving unit to use data at the receiving unit corresponding to the matched reference key; and
(g) repeating steps (c), (d), (e), and (f) for additional groups of source data in the source unit until the data at the receiving unit is identical to the data at the source unit,
wherein the groups of source data comprise, if the preceding source key did not match a reference key, n−1 bytes from the first group of data and one additional byte of data, and if the preceding source key did match a reference key, n bytes of data different from the n bytes of the preceding source group of data.
26. A method of creating at a receiving computer a duplicate file that is identical to a source file at a sending computer, the duplicate file being formed in part from data in a reference file located at the receiving computer and in part from data in the source file transmitted from the sending computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) identifying a reference file at the receiving computer that may have data identical to the data comprising the source file;
(b) dividing the data comprising the reference file into a plurality of data blocks having n-bytes per block and associating each data block with a reference key value determined by a key defining method;
(c) transmitting the reference key values from the receiving computer to the sending computer;
(d) identifying an n-byte block of data from the source file and computing using the key defining method a current value for a source key associated with the identified block of data;
(e) comparing the current value of the source key with each of the reference key values and, if a match is found, (i) transmitting an indication of such to the receiving computer, which adds the matching data from the reference file to the duplicate file, and (ii) repeating step (d); and
(f) if a match was not found in step (e), transferring to the receiving computer a subset of the n-byte block of data to be added to the duplicate file and repeating step (d).
18. A method of creating at a receiving computer a duplicate file that is identical to a source file at a sending computer, the duplicate file being formed in part from data in a reference file located at the remote receiving computer and in part from data in the source file transmitted from the sending computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) dividing the reference file located at the receiving computer into a plurality of data blocks of uniform length and associating with each data block a reference key value determined by the data in that block in accordance with a key defining method; and
(b) identifying blocks of data of the uniform length from the source file, determining source key values in accordance with the key defining method, and comparing the source and reference key values to determine whether blocks of data from the reference file match blocks of data from the source file and, in instances where a match is found between a block of data from each file, sending an indication to the receiving computer to copy the block of data from the reference file into the duplicate file so that the block of data indicated by the match need not be transmitted to the receiving computer, wherein the blocks of data from the source file are sequentially identified and each source block of data includes some of the data from the preceding source block of data if the preceding source block of data did not match a reference block of data.
21. A method of creating at a receiving computer a duplicate file that is identical to a source file at a sending computer, the duplicate file being formed in part from data in a reference file located at the remote receiving computer and in part from data in the source file transmitted from the sending computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) dividing the reference file located at the receiving computer into a plurality of data blocks of uniform length and associating each data block with a reference key value determined by the data in that block in accordance with a key defining method;
(b) identifying blocks of data of the uniform length from the source file, determining source key values in accordance with the key defining method, and using the source and reference key values to compare blocks of data from the reference file with blocks of data from the source file;
(c) in instances where a match is found between a block of data from each file, sending an indication of the match to the receiving computer to copy the block of data from the reference file to the duplicate file so that the block of data indicated by the match need not be transmitted to the receiving computer; and
(d) in instances where a match is not found between a block of data from each file, transmitting less fewer bytes than the number of bytes in the uniform length from the source file to the receiving computer and adding transmitted bytes to the duplicate file.
22. A method of creating at a receiving computer a duplicate file that is identical to a source file at a sending computer, the duplicate file being formed in part from data in a reference file located at the remote receiving computer and in part from data in the source file transmitted from the sending computer, the computers being connected through a computer data interface, the method comprising the steps of:
(a) dividing the reference file located at the receiving computer into a plurality of data blocks, each data block having a length of n bytes, and associating each data block with a reference key value determined by the data in that block in accordance with a key defining method;
(b) identifying blocks of data of length n bytes from the source file, determining source key values in accordance with the key defining method, and using the source and reference key values to compare blocks of data from the source file with blocks of data from the reference file to find a match;
(c) in instances where a match is found between a block of data from each file, sending an indication of the match to the receiving computer to copy the block of data from the reference file to the duplicate file so that the block of data indicated by the match need not be transmitted from the source sending computer to the receiving computer; and
(d) in instances where a match is not found:
(i) transmitting a subset of the an initial block to the receiving computer and adding the subset to the duplicate file;
(ii) identifying from the source file a subsequent block of data of length n bytes comprising the initial block of data, less the transmitted subset, and additional data from the source file; and
(iii) determining for the subsequent block of data a source key, the source key being derived from the source key determined from the initial block of data by removing the contribution from the transmitted subset and incorporating a contribution from the additional data.
2. The method of
the method further including the step of transmitting a subset of the initial block to the receiving computer, the subset including less than all of the information in the initial block; and
identifying blocks of data of length n bytes from the source file includes identifying from the source file a subsequent block of data of length n bytes comprising the initial block of data, less the transmitted subset, and additional data from the source file.
3. The method of
4. The method of
6. The method of
7. The method of
8. The method of
9. The method of
10. The method of
11. The method of
C1(n)+C2(n−1)+C3(n−2)+. . . +Cn−1(2)+Cn where Cn is the character in the nth position of the block of data.
12. The method of
C1 XOR C2 XOR C3 . . . Cn−1 XOR Cn. 14. The method of
15. The method of
17. The apparatus of
20. The method of
23. The method of
27. The method of
28. The method of
29. The method of
31. The method of
0. 34. The method of
0. 35. The method of
0. 36. The method of
successively determining different second keys corresponding to different groups of data stored at the second unit;
successively comparing each of the different second keys with the multiple first keys; and
transmitting from the designated source unit to the designated receiving unit data corresponding to each of the different second keys that matched none of the multiple first keys.
0. 38. The method of
transmitting to the designated receiving computer a subset of the selected data block from the first file, the subset including less than all of the information in the selected data block; and
identifying from the first file a subsequent data block comprising the selected data block less the subset transmitted to the designated receiving computer, and additional data from the first file.
0. 39. The method of
|
This is a continuation of application Ser. No. 08/182,969, filed Jan. 14, 1994 now U.S. Pat. No. 5,446,888.
The present invention relates to computer communications in general and, in particular, to a method and apparatus for decreasing the time required to update files located at a remote computer.
In computer communications technology, the rate of data communication between a computer and other peripheral devices is very important. The ability to quickly and accurately transfer data between two personal computers is of special interest in light of the increased use of portable computers. Often, data entered into a portable computer is ultimately transferred to a user's home or office personal computer. Computer specialists are continually searching for communication protocols that decrease the time required to transfer data without compromising the reliability of the data being transmitted.
A conventional method for conveying data between computers, especially personal computers, involves the interconnection of a data bus in a sending computer with a data bus in a receiving computer. This may be done by coupling the serial, parallel, or similar communications ports of each computer through an interface link, such as a cable or across a data path using modems. In serial communication, data is transferred one bit at a time. Serial communications work well for transferring data over long distances, and particularly with modems that couple two computers using a telephone line. However, the time required to transfer data using serial communications can be significant, especially for larger files. When communicating between two devices that are relatively close, parallel communications are often used. Parallel communication is the simultaneous transfer of a number of bits of data in parallel, e.g., 8-bit, using a multi-bit data path.
Computer software companies are continually investigating more efficient methods of transferring data to reduce data transmission times. Two prevalent areas of concentration have been on increasing data transfer rates and on incorporating forms of data compression to reduce the amount of data being sent. Advances in data transfer rates have been accomplished by increasing the speed at which modems communicate in serial communication and by increasing the number of bits that can be transferred simultaneously in parallel communication. An example technology that incorporates the latter technique is described in U.S. Pat. No. 5,261,060, titled “Eight-bit Parallel Communications Method and Apparatus,” and assigned to the assignee of the present invention. U.S. Pat. No. 5,261,060 is hereby incorporated by reference. Data compression schemes reduce the size of a file to be transmitted by various means of compacting information. For example, one common compression technique, called key-word encoding, replaces words that occur frequently, e.g., the, with a 2-byte token representation of each word. After the compressed data is received by a remote computer, the data is decompressed to create a representation of the original contents of the file.
A more recent approach to decreasing the time required to transfer a file has recognized that a receiving computer will often have a file, i.e., a reference file, that is similar or perhaps even identical to a source file to be transmitted. For example, the source file may simply include text from the reference file with only a few words or sentences changed. Rather than sending an original or compressed representation of the entire source file, file transfer methods utilizing this approach identify the differences between the two files, and then transfer only the differences to thee receiving computer. Upon receipt, the difference information is used to update the reference file at the receiving computer, thereby reproducing a precise copy of the source file. The present invention is directed toward an improved method of identifying and transferring revisions between a source file and a reference file to create an accurate copy of the source file at a remote computer.
The invention is a file transfer method that identifies and isolates the differences between a source file located at a sending computer and a reference file, located at a receiving computer, that may have data similar to the data comprising the source file. The computers are connected through a computer data interface. The method includes the steps of: (a) dividing the reference file into a plurality of data blocks and associating each data block with a key value representative of the data in each block; and (b) identifying blocks of data at the source file and using the key values to compare blocks of data from the reference file to blocks of data from the source file and, in instances where a match is found between a block of data from each file, sending an indication of the match to the receiving computer so that the block of data indicated by the match need not be transmitted to the receiving computer.
In accordance with other aspects of the invention, the step of identifying blocks of data at the source file includes the step of computing a source key for each block of data which is then compared to the key values from the reference file.
In accordance with still further aspects of the invention, an initial block of data is identified from the source file and a source key is computed from the initial block. If a match for the initial block is not found, the method includes the steps of: (i) transmitting a byte of data from the initial block to the receiving computer; and (ii) identifying a subsequent block of data from the source file comprising the initial block of data, less the transmitted byte, and a byte of data from the source file.
In accordance with other aspects of the invention, the method includes the step of transmitting the key values associated with data blocks in the reference file to the sending computer. Further, the key value for a block of data is computed by multiplying the bytes in the block by one or more multipliers, the value of the multiplier being dependent upon the position of a given byte in the block, and summing the results of the multiplication operations.
The foregoing aspects and many of the attendant advantages of this invention will become more readily appreciated as the same becomes better understood by reference to the following detailed description, when taken in conjunction with the accompanying drawings, wherein:
Remote file transfer applications often involve a situation where a receiving computer already contains a file that is similar, or perhaps even identical to, a file to be transmitted. For example, the file to be transmitted may be a revision of a text file with only a few words or sentences changed. The invention is a file transfer method that identifies and isolates the differences between the two files, and transmits only those differences to the receiving computer. For similar files, the file transfer method can result in compression ratios far in excess of those achieved by traditional data compression methods.
The sending computer 20 generally comprises a processing unit 26, a memory 28, and a number of communications ports 30. The memory, including random access memory (RAM), read only memory (ROM), and external systems memory, is connected to the processing unit 26 by a data/address bus 32. The communications ports are connected to the processing unit by a data bus 34. The communications ports 30 include parallel and serial ports, as well as other input/output technologies including PCMCIA card technology, that allow data to be sent and received by the sending computer. The receiving computer 22 is similar to the sending computer, and includes a processing unit 36, memory 38, communications ports 40, data/address lines 42, and a data bus 44. Although for ease of description one computer is called the sending computer and the other is called the receiving computer, the computers are generally interchangeable.
In order to accomplish data transfer, the sending and the receiving computers include computer program controls that, for example, are stored in RAM and executed by the processing units of each computer. In one embodiment of the invention, the sending and receiving computer controls are combined into a single file transfer program 45 that is resident at each computer. In this manner, each computer can operate as a sending or receiving computer. Because of the requirements of handshaking, copies of the file transfer program 45 located at each computer are preferably executed simultaneously. This allows for full-duplex transmission, i.e., simultaneous communications in each direction. The invention may also be utilized in half-duplex communications, although not as efficiently.
For clarity in this discussion, throughout the Detailed Description it is assumed that a source file 46 located at the sending computer is to be sent to the receiving computer 22. Further, it is assumed that the receiving computer includes a reference file 48 that includes at least some similarities to the source file. Once a user indicates that a source file is to be transferred, a reference file that may have data that is similar to the source file is identified by, for example, having a file name that is the same or similar to the source file. The invention described herein generally assumes that a reference file has been identified. The basic steps implemented by the file transfer program are as follows:
(1) identifying a reference file at the receiving computer that may have data similar to data comprising the source file;
(2) dividing the data comprising the reference file into a plurality of data blocks having n-bytes per block and associating each data block with a key value;
(3) transmitting the key values from the receiving computer to the sending computer;
(4) identifying a current n-byte block of data from the source file and computing a value for a source key associated with the current block of data;
(5) comparing the value of the source key with each of the key values from the reference file and, if a match is found, (i) transmitting an indication of the match to the receiving computer, and (ii) repeating step (4); and
(6) if a match was not found, transferring to the receiving computer a byte of data from the current block of data, adding an additional byte of data from the source file to the current block of data, re-computing the value of the source key, and repeating step (5).
Generally, the loops created by steps (5) and (6) repeat until all of the data in the source file has been considered. At the receiving computer, a destination file is created from the match indications and the byte transmissions. The destination file will be a duplicate of the source file upon completion of transmission.
Once the keys for each block of data in the reference file have been computed, the keys are sent as an array to the sending computer for comparison to the source file.
In step (4), the value of KEY1 is compared to each of the keys in the reference file to determine whether a match has been found, thereby indicating that the current block of data is identical to a block of data in the reference file. If a match is found, an indication of such is sent to the receiving computer. Assuming a match has not been found, according to step (5) the first byte in the current block (byte zero) is sent to the receiving computer. A subsequent “current” block of data is then evaluated by subtracting the first byte of data (byte zero) from the current block, adding the next sequential byte of data (byte n) to the current block, and recomputing the key value for the subsequent current block. The key value for this block of data is labeled KEY2. Thus, KEY2 will comprise the values of bytes 1 through n. The value of KEY2 is then compared to each of the keys in the key array for the reference file.
Assuming a match is not made, the first byte in the current block (byte 1) is sent to the receiving computer. A third key KEY3 representing the current block of data is then computed by sliding the current block of data one byte to the right, such that KEY3 comprises the values of bytes 2 through (n+1). This will continue until either a match is found between a key value computed from a data block in the source file and a key in the key array for the reference file, or all of the data in the source file has been transmitted. Assuming a match is found, an indication of such is sent to the receiving computer, and a subsequent current block of data is computed from the source file.
It is noted that in the case where a match is not found, the additional time required to transfer a file, in comparison to traditional methods, is negligible despite the sliding window and key computations. This is, in part, due to the fact that the processor can make computations much faster than data can be sent. Further, in a preferred embodiment, the receiving computer is configured to expect that bytes being received are data bytes and are not indicative of a match between two data blocks. In the latter case, an additional “match-indicator” byte is sent ahead of the byte(s) indicating that a match has occurred. Thus, the number of bytes being sent in the case of no matches will generally be approximately the same as if the data were simply transmitted without any opportunity for match checks in accordance with the invention.
The foregoing is an overview of an exemplary embodiment of the file transfer program 45. Exemplary routines for implementing the file transfer program is software are set forth in
A test is made at block 130 to determine whether the end of the reference file has been reached. If the end of the reference file has not been reached, a test is made at block 132 to determine whether a full block of data has been considered, i.e., whether n is equal to the block size. If n is not equal to the block size, the subroutine loops back to block 124. If n is equal to the block size, or if it was determined at block 130 that the end of the file was reached, the subroutine terminates, and control returns to the routine of FIG. 4.
If a match was found at block 160, a message is sent at block 162 to the receiving computer to emit the matching block to the destination file. The routine then loops to block 154. If a match was not found, at block 164 a first byte of data in the current block is sent to the receiving computer. At block 166, the byte of data that was sent to the receiving computer is removed from the current block of data. A test is then made at block 168 to determine whether there is any data remaining in the source file that has not been considered. If there is data remaining in the source file, a new byte of data is read from the source file at block 170 and added to the current block of data at block 172. The routine then loops to block 156 where the key for the current block of data is computed.
Those skilled in the art will appreciate that, in computing the current key in block 156 after looping from block 172, it is more efficient to obtain the value of the key for the current block by subtracting from the previously-computed current key the value of the byte that was removed from the current block (in block 166) and then adding the value of the byte that was added to the current block (in block 172), rather than performing the key calculation by adding every character in the current block.
If all of the data remaining in the source file has been considered, or if there were less than n-bytes of data remaining in the source file as determined in the test at block 152, the data remaining in the source file is sent to the receiving computer at block 174. At the receiving computer, the transmitted data is added to the destination file and the file transfer is complete. In an alternative embodiment, instead of simply sending the data remaining as indicated in block 174, a test is made to determine if the key value of the data remaining matches the key value of the last block of data in the reference file. If a match is present, an indication of the match is sent to the receiving computer, and the data itself need not be transmitted. Otherwise, the actual data is transmitted. This will result in a further optimization of the transfer in situations where the end of the reference file contains the same data as the end of the source file.
Once all of the data in the source file has been added to the destination file, i.e., through blocks 162, 164 and 174, the destination file will in most circumstances be an exact copy of the source file. However, it is preferable that a check be made to ensure that the destination file is indeed a precise duplicate of the source file. In block 176, the integrity of the destination file is checked using means known to those skilled in the art. One method of checking the file integrity is a cyclic redundancy-check (CRC), such as that set forth in M. Nelson, The Data Compression Book, 446-448 (M&T Books 1991), which is hereby incorporated by reference. If the integrity of the destination file was compromised, the data from the source file is retransmitted to the destination file using conventional transmission methods. This is indicated at block 178. If the integrity of the destination file tested positive, or upon transmitting the source file, the routine terminates.
One circumstance where the destination file may not be an accurate copy of the source file is where two or more different blocks of data yield the same key value. If it is assumed that each block of data is 256 bytes, under the key computation method described in
Another desirable feature of an advantageous key computation method is if the current key values for blocks of source data that are derived on a sliding window basis can be quickly established. One way of accomplishing this is to have a key computation method that allows the current key to be updated by subtracting the key value associated with the byte of data to be subtracted from the current block of data (block 166) and adding the key value associated with the byte of data to be added to the current block (block 172). While the key computation method described in
With reference to
C1(n)+C2(n−1)+C3(n−2)+. . . Cn−1(2)+Cn (1)
where Ci is the character in the ith position of a current block and n is the number of bytes in each block. The upper 8-bits of the 32-bit key are calculated by performing an exclusive OR operation (XOR) on each of the characters, as shown by the equation:
C1 XOR C2 XOR C3 . . . Cn−1 XOR Cn (2)
Once the lower and upper key values are calculated, the bits are concatenated to form each 32-bit key.
At block 208, the value of the current byte is added to the variable sum. The key.24 variable is then increased by the value of sum at block 210. It will be appreciated that blocks 208 and 210 are alternate methods of computing equation (1) without requiring multiplication operations. At block 212, the variable key.8 is set equal to the previous value of key.8 XOR the current byte.
A test is made at block 214 to determine if the end of the reference file has been reached. If the end of the reference file has not been reached, a test is made at block 216 to determine whether n is equal to the block size. If n is not equal to the block size, the routine loops to block 206. If n is equal to the block size, or if the end of the file has been reached, the variable “key” is set by concatenating the lower 24-bit (key.24) value computed at block 210 with the upper 8-bit (key.8) value computed at block 212. The subroutine then terminates, and the program returns to block 106 of FIG. 4.
If the current block of data was identified on the basis of a previous, unmatched block of data, the first byte from the previous block (termed the removed byte from the operation of block 166) is subtracted from sum at block 224. At block 226, the key.24 is set equal to its previous value less the product of the block size times the value of the removed byte. At block 228, the new byte (added to the current block in block 172) is added to sum. The key.24 variable is then increased by the value of sum at block 230.
At block 232, the variable key.8 is set equal to the previous value of key.8 XOR the removed byte. An exclusive OR operation is then performed between key.8 the new byte. At block 236 the variable “key” is set by concatenating the lower 24-bit (key.24) value computed at block 230 with the upper 8-bit (key.8) value computed at block 234. The subroutine then terminates, and control returns to block 158 of FIG. 6. As can be seen, the subroutine of
As will be appreciated by those skilled in the art, a large number of different key computation methods may be used in accordance with the invention. Thus, the invention is not to be limited by exemplary key calculations illustrated herein. Any key computation that is not unnecessarily time-consuming computationally and that provides a relatively wide range of results may be beneficial. Moreover, the type of key computation used in any particular embodiment may depend upon the block size to achieve optimal results. Another key computation that may be used is to multiply each character in a block by its position in the block, and summing the results of the multiplication operations. Another key computation that may be implemented is the CRC file integrity check discussed above. Although this method is extremely accurate, it may be too slow for many applications.
With reference again to
While the preferred embodiment of the invention has been illustrated and described, it will be appreciated that various changes can be made therein without departing from the spirit and scope of the invention.
Patent | Priority | Assignee | Title |
7752267, | Mar 13 2001 | Minolta Co., Ltd. | Device, method and program product for data transmission management |
8055819, | Jun 13 2007 | NEC Corporation | Information processor |
8516473, | Jun 29 2000 | STONE INTERACTIVE VENTURES LLC | Converting a limited program object to a complete program object |
8725685, | Feb 25 2004 | Sony Corporation | Content transfer apparatus and associated methodology of updating contents between devices |
Patent | Priority | Assignee | Title |
3311893, | |||
3612660, | |||
4232375, | Jun 12 1978 | NCR Corporation | Data compression system and apparatus |
4412306, | May 14 1981 | System for minimizing space requirements for storage and transmission of digital signals | |
4641274, | Dec 03 1982 | International Business Machines Corporation | Method for communicating changes made to text form a text processor to a remote host |
4807182, | Mar 12 1986 | ADVANCED SOFTWARE, INC , 44 PIERCE MITCHELL PLACE, STANFORD, CALIFORNIA 94305 A CA CORP | Apparatus and method for comparing data groups |
4891785, | Jul 08 1988 | Method for transferring data files between computers in a network response to generalized application program instructions | |
4914583, | Apr 13 1988 | MOTOROLA COMPUTER X, INC | Method of indicating processes resident within a cell of a data processing system |
5086402, | Jul 10 1989 | Simware, Inc. | Method for high speed data transfer |
5086434, | Sep 30 1985 | Canon Kabushiki Kaisha | Data communication process and apparatus for data transmission in blocks which may include mixed data types |
5101348, | Jun 23 1988 | INTERNATIONAL BUSINESS MACHINES CORPORATION, ARMONK, NEW YORK 10504 A CORP OF NY | Method of reducing the amount of information included in topology database update messages in a data communications network |
5155847, | Aug 03 1988 | DOT ASSETS NO 9 LLC | Method and apparatus for updating software at remote locations |
5210865, | Jun 30 1989 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Transferring data between storage media while maintaining host processor access for I/O operations |
5283646, | Apr 09 1992 | Polycom, Inc | Quantizer control method and apparatus |
5479654, | Apr 26 1990 | DOUBLE-TAKE SOFTWARE CANADA INC | Apparatus and method for reconstructing a file from a difference signature and an original file |
6076084, | Jan 03 1994 | Norton-Lambert Corp. | File transfer method and apparatus utilizing delimiters |
EP69212, | |||
EP541281, | |||
WO9102313, | |||
WO9319420, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 24 2000 | Laplink Software, Inc. | (assignment on the face of the patent) | / | |||
Jun 12 2001 | LAPLINK COM, INC | LAPLINK, INC | CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 012607 | /0912 | |
Mar 02 2005 | TIRO TRADING, LLC | LAPLINK SOFTWARE, INC | NUNC PRO TUNC ASSIGNMENT SEE DOCUMENT FOR DETAILS | 015908 | /0745 | |
Mar 10 2005 | LAPLINK, INC | TIRO TRADING, LLC | NUNC PRO TUNC ASSIGNMENT SEE DOCUMENT FOR DETAILS | 015908 | /0569 | |
Jun 29 2007 | LAPLINK SOFTWARE, INC | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019767 | /0279 | |
Oct 14 2014 | Microsoft Corporation | Microsoft Technology Licensing, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 034541 | /0001 |
Date | Maintenance Fee Events |
Jul 22 2009 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Aug 13 2009 | STOL: Pat Hldr no Longer Claims Small Ent Stat |
Date | Maintenance Schedule |
Jan 02 2010 | 4 years fee payment window open |
Jul 02 2010 | 6 months grace period start (w surcharge) |
Jan 02 2011 | patent expiry (for year 4) |
Jan 02 2013 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jan 02 2014 | 8 years fee payment window open |
Jul 02 2014 | 6 months grace period start (w surcharge) |
Jan 02 2015 | patent expiry (for year 8) |
Jan 02 2017 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jan 02 2018 | 12 years fee payment window open |
Jul 02 2018 | 6 months grace period start (w surcharge) |
Jan 02 2019 | patent expiry (for year 12) |
Jan 02 2021 | 2 years to revive unintentionally abandoned end. (for year 12) |